killbill-aplcache

test: first pass at using h2 MySQL is still the default. To

11/30/2012 7:46:31 PM

Changes

invoice/pom.xml 5(+5 -0)

pom.xml 6(+6 -0)

util/pom.xml 5(+5 -0)

Details

diff --git a/account/src/main/resources/com/ning/billing/account/ddl.sql b/account/src/main/resources/com/ning/billing/account/ddl.sql
index 28dc6e1..da8ba7d 100644
--- a/account/src/main/resources/com/ning/billing/account/ddl.sql
+++ b/account/src/main/resources/com/ning/billing/account/ddl.sql
@@ -1,3 +1,5 @@
+/*! SET storage_engine=INNODB */;
+
 DROP TABLE IF EXISTS accounts;
 CREATE TABLE accounts (
     record_id int(11) unsigned NOT NULL AUTO_INCREMENT,
@@ -28,7 +30,7 @@ CREATE TABLE accounts (
     updated_by varchar(50) DEFAULT NULL,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE UNIQUE INDEX accounts_id ON accounts(id);
 CREATE UNIQUE INDEX accounts_external_key ON accounts(external_key);
 CREATE INDEX accounts_tenant_record_id ON accounts(tenant_record_id);
@@ -65,7 +67,7 @@ CREATE TABLE account_history (
     updated_date datetime NOT NULL,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-    ) ENGINE=innodb;
+    );
 CREATE INDEX account_history_target_record_id ON account_history(target_record_id);
 CREATE INDEX account_history_tenant_record_id ON account_history(tenant_record_id);
 
@@ -83,7 +85,7 @@ CREATE TABLE account_emails (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE UNIQUE INDEX account_email_id ON account_emails(id);
 CREATE INDEX account_email_account_id_email ON account_emails(account_id, email);
 CREATE INDEX account_emails_tenant_account_record_id ON account_emails(tenant_record_id, account_record_id);
@@ -104,6 +106,6 @@ CREATE TABLE account_email_history (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE INDEX account_email_target_record_id ON account_email_history(target_record_id);
 CREATE INDEX account_email_history_tenant_account_record_id ON account_email_history(tenant_record_id, account_record_id);
diff --git a/account/src/test/java/com/ning/billing/account/AccountTestBase.java b/account/src/test/java/com/ning/billing/account/AccountTestBase.java
index b75ec6f..6d9acdb 100644
--- a/account/src/test/java/com/ning/billing/account/AccountTestBase.java
+++ b/account/src/test/java/com/ning/billing/account/AccountTestBase.java
@@ -72,7 +72,7 @@ public abstract class AccountTestBase extends AccountTestSuiteWithEmbeddedDB {
     @BeforeClass(groups = "slow")
     protected void setup() throws IOException {
         try {
-            final IDBI dbi = getMysqlTestingHelper().getDBI();
+            final IDBI dbi = getDBI();
 
             final InternalCallContextFactory internalCallContextFactory = new InternalCallContextFactory(dbi, clock);
             accountDao = new DefaultAccountDao(dbi, bus, internalCallContextFactory);
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
index b223a80..4ed57a9 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
+++ b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
@@ -1,3 +1,5 @@
+/*! SET storage_engine=INNODB */;
+
 drop table if exists bst;
 create table bst (
   record_id int(11) unsigned not null auto_increment
@@ -36,7 +38,7 @@ create table bst (
 , account_record_id int(11) unsigned default null
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
-) engine=innodb comment 'Business Subscription Transitions, track bundles lifecycle';
+) comment 'Business Subscription Transitions, track bundles lifecycle';
 create index bst_key_index on bst (external_key, requested_timestamp asc);
 create index bst_tenant_account_record_id on bst(tenant_record_id, account_record_id);
 
@@ -59,7 +61,7 @@ create table bac (
 , account_record_id int(11) unsigned default null
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
-) engine=innodb comment 'Business ACcounts, keep a record of all accounts';
+) comment 'Business ACcounts, keep a record of all accounts';
 create unique index bac_key_index on bac (account_key);
 create index bac_tenant_account_record_id on bac(tenant_record_id, account_record_id);
 
@@ -82,7 +84,7 @@ create table bin (
 , account_record_id int(11) unsigned default null
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
-) engine=innodb comment 'Business INvoices, keep a record of generated invoices';
+) comment 'Business INvoices, keep a record of generated invoices';
 create unique index bin_key_index on bin (invoice_id);
 create index bin_tenant_account_record_id on bin(tenant_record_id, account_record_id);
 
@@ -109,7 +111,7 @@ create table bii (
 , account_record_id int(11) unsigned default null
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
-) engine=innodb comment 'Business Invoice Items, keep a record of all invoice items';
+) comment 'Business Invoice Items, keep a record of all invoice items';
 create unique index bii_key_index on bii (item_id);
 create index bii_tenant_account_record_id on bii(tenant_record_id, account_record_id);
 
@@ -139,7 +141,7 @@ create table bip (
 , account_record_id int(11) unsigned default null
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
-) engine=innodb comment 'Business Invoice Payments, track all payments';
+) comment 'Business Invoice Payments, track all payments';
 create unique index bip_key_index on bip (payment_id);
 create index bip_tenant_account_record_id on bip(tenant_record_id, account_record_id);
 
@@ -155,7 +157,7 @@ create table bos (
 , account_record_id int(11) unsigned default null
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
-) engine=innodb comment 'Business Overdue Status, historical bundles overdue status';
+) comment 'Business Overdue Status, historical bundles overdue status';
 create index bos_tenant_account_record_id on bos(tenant_record_id, account_record_id);
 
 drop table if exists bac_tags;
@@ -167,7 +169,7 @@ create table bac_tags (
 , account_record_id int(11) unsigned default null
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
-) engine=innodb comment 'Tags associated to accounts';
+) comment 'Tags associated to accounts';
 create index bac_tags_tenant_account_record_id on bac_tags(tenant_record_id, account_record_id);
 
 drop table if exists bac_fields;
@@ -180,7 +182,7 @@ create table bac_fields (
 , account_record_id int(11) unsigned default null
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
-) engine=innodb comment 'Custom fields associated to accounts';
+) comment 'Custom fields associated to accounts';
 create index bac_fields_tenant_account_record_id on bac_fields(tenant_record_id, account_record_id);
 
 drop table if exists bst_tags;
@@ -193,7 +195,7 @@ create table bst_tags (
 , account_record_id int(11) unsigned default null
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
-) engine=innodb comment 'Tags associated to bundles';
+) comment 'Tags associated to bundles';
 create index bst_tags_tenant_account_record_id on bst_tags(tenant_record_id, account_record_id);
 
 drop table if exists bst_fields;
@@ -207,7 +209,7 @@ create table bst_fields (
 , account_record_id int(11) unsigned default null
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
-) engine=innodb comment 'Custom fields associated to bundles';
+) comment 'Custom fields associated to bundles';
 create index bst_fields_tenant_account_record_id on bst_fields(tenant_record_id, account_record_id);
 
 drop table if exists bin_tags;
@@ -218,7 +220,7 @@ create table bin_tags (
 , account_record_id int(11) unsigned default null
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
-) engine=innodb comment 'Tags associated to invoices';
+) comment 'Tags associated to invoices';
 create index bin_tags_tenant_account_record_id on bin_tags(tenant_record_id, account_record_id);
 
 drop table if exists bin_fields;
@@ -230,7 +232,7 @@ create table bin_fields (
 , account_record_id int(11) unsigned default null
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
-) engine=innodb comment 'Custom fields associated to invoices';
+) comment 'Custom fields associated to invoices';
 create index bin_fields_tenant_account_record_id on bin_fields(tenant_record_id, account_record_id);
 
 drop table if exists bip_tags;
@@ -241,7 +243,7 @@ create table bip_tags (
 , account_record_id int(11) unsigned default null
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
-) engine=innodb comment 'Tags associated to payments';
+) comment 'Tags associated to payments';
 create index bip_tags_tenant_account_record_id on bip_tags(tenant_record_id, account_record_id);
 
 drop table if exists bip_fields;
@@ -253,5 +255,5 @@ create table bip_fields (
 , account_record_id int(11) unsigned default null
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
-) engine=innodb comment 'Custom fields associated to payments';
+) comment 'Custom fields associated to payments';
 create index bip_fields_tenant_account_record_id on bip_fields(tenant_record_id, account_record_id);
diff --git a/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestModule.java b/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestModule.java
index 320d651..8a871e5 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestModule.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestModule.java
@@ -19,11 +19,11 @@ package com.ning.billing.analytics;
 import org.mockito.Mockito;
 import org.skife.jdbi.v2.IDBI;
 
+import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
 import com.ning.billing.account.glue.DefaultAccountModule;
 import com.ning.billing.analytics.setup.AnalyticsModule;
 import com.ning.billing.catalog.api.Catalog;
 import com.ning.billing.catalog.api.CatalogService;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.entitlement.glue.DefaultEntitlementModule;
 import com.ning.billing.invoice.glue.DefaultInvoiceModule;
 import com.ning.billing.junction.glue.DefaultJunctionModule;
@@ -62,9 +62,7 @@ public class AnalyticsTestModule extends AnalyticsModule {
         install(new DefaultJunctionModule());
 
         // Install the Dao layer
-        final MysqlTestingHelper helper = AnalyticsTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
-        bind(MysqlTestingHelper.class).toInstance(helper);
-        final IDBI dbi = helper.getDBI();
+        final IDBI dbi = KillbillTestSuiteWithEmbeddedDB.getDBI();
         bind(IDBI.class).toInstance(dbi);
 
         bind(TagDefinitionSqlDao.class).toInstance(dbi.onDemand(TagDefinitionSqlDao.class));
diff --git a/beatrix/src/main/resources/com/ning/billing/beatrix/ddl.sql b/beatrix/src/main/resources/com/ning/billing/beatrix/ddl.sql
index 13857a7..655d4e0 100644
--- a/beatrix/src/main/resources/com/ning/billing/beatrix/ddl.sql
+++ b/beatrix/src/main/resources/com/ning/billing/beatrix/ddl.sql
@@ -1,4 +1,4 @@
-
+/*! SET storage_engine=INNODB */;
 
 DROP TABLE IF EXISTS bus_ext_events;
 CREATE TABLE bus_ext_events (
@@ -14,7 +14,7 @@ CREATE TABLE bus_ext_events (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE INDEX  `idx_bus_ext_where` ON bus_ext_events (`processing_state`,`processing_owner`,`processing_available_date`);
 CREATE INDEX bus_ext_events_tenant_account_record_id ON bus_ext_events(tenant_record_id, account_record_id);
 
@@ -27,5 +27,5 @@ CREATE TABLE claimed_bus_ext_events (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE INDEX claimed_bus_ext_events_tenant_account_record_id ON claimed_bus_ext_events(tenant_record_id, account_record_id);
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/BeatrixIntegrationModule.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/BeatrixIntegrationModule.java
index 27240be..cd04508 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/BeatrixIntegrationModule.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/BeatrixIntegrationModule.java
@@ -42,8 +42,8 @@ import com.ning.billing.beatrix.util.PaymentChecker;
 import com.ning.billing.catalog.api.CatalogService;
 import com.ning.billing.catalog.glue.CatalogModule;
 import com.ning.billing.dbi.DBIProvider;
+import com.ning.billing.dbi.DBTestingHelper;
 import com.ning.billing.dbi.DbiConfig;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.entitlement.api.EntitlementService;
 import com.ning.billing.entitlement.glue.DefaultEntitlementModule;
 import com.ning.billing.invoice.api.InvoiceService;
@@ -88,8 +88,7 @@ public class BeatrixIntegrationModule extends AbstractModule {
         bind(ClockMock.class).asEagerSingleton();
         bind(Lifecycle.class).to(SubsetDefaultLifecycle.class).asEagerSingleton();
 
-        final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
-        bind(MysqlTestingHelper.class).toInstance(helper);
+        final DBTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getDBTestingHelper();
         final IDBI dbi;
         if (helper.isUsingLocalInstance()) {
             final DbiConfig config = new ConfigurationObjectFactory(System.getProperties()).build(DbiConfig.class);
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
index 8d1962c..de18242 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
@@ -16,10 +16,6 @@
 
 package com.ning.billing.beatrix.integration;
 
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
-
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.UUID;
@@ -58,7 +54,6 @@ import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.catalog.api.PlanPhaseSpecifier;
 import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.entitlement.api.EntitlementService;
 import com.ning.billing.entitlement.api.timeline.EntitlementTimelineApi;
 import com.ning.billing.entitlement.api.transfer.EntitlementTransferApi;
@@ -94,6 +89,10 @@ import com.google.common.base.Joiner;
 import com.google.inject.Inject;
 import com.google.inject.name.Named;
 
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
+
 public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implements TestListenerStatus {
 
     protected static final DateTimeZone testTimeZone = DateTimeZone.UTC;
@@ -133,9 +132,6 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
     protected AccountService accountService;
 
     @Inject
-    protected MysqlTestingHelper helper;
-
-    @Inject
     protected EntitlementUserApi entitlementUserApi;
 
     @Inject
@@ -252,38 +248,37 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
     }
 
     protected void verifyTestResult(final UUID accountId, final UUID subscriptionId,
-            final DateTime startDate, @Nullable final DateTime endDate,
-            final BigDecimal amount, final DateTime chargeThroughDate,
-            final int totalInvoiceItemCount) throws EntitlementUserApiException {
+                                    final DateTime startDate, @Nullable final DateTime endDate,
+                                    final BigDecimal amount, final DateTime chargeThroughDate,
+                                    final int totalInvoiceItemCount) throws EntitlementUserApiException {
         final SubscriptionData subscription = subscriptionDataFromSubscription(entitlementUserApi.getSubscriptionFromId(subscriptionId, callContext));
 
-
         /*
-        final List<Invoice> invoices = invoiceUserApi.getInvoicesByAccount(accountId);
-        final List<InvoiceItem> invoiceItems = new ArrayList<InvoiceItem>();
-        for (final Invoice invoice : invoices) {
-            invoiceItems.addAll(invoice.getInvoiceItems());
-        }
-        assertEquals(invoiceItems.size(), totalInvoiceItemCount);
-
-        boolean wasFound = false;
-
-        // We implicitly assume here that the account timezone is the same as the one for startDate/endDate
-        for (final InvoiceItem item : invoiceItems) {
-            if (item.getStartDate().compareTo(new LocalDate(startDate)) == 0) {
-                if ((item.getEndDate() == null && endDate == null) || (item.getEndDate() != null && new LocalDate(endDate).compareTo(item.getEndDate()) == 0)) {
-                    if (item.getAmount().compareTo(amount) == 0) {
-                        wasFound = true;
-                        break;
+                final List<Invoice> invoices = invoiceUserApi.getInvoicesByAccount(accountId);
+                final List<InvoiceItem> invoiceItems = new ArrayList<InvoiceItem>();
+                for (final Invoice invoice : invoices) {
+                    invoiceItems.addAll(invoice.getInvoiceItems());
+                }
+                assertEquals(invoiceItems.size(), totalInvoiceItemCount);
+
+                boolean wasFound = false;
+
+                // We implicitly assume here that the account timezone is the same as the one for startDate/endDate
+                for (final InvoiceItem item : invoiceItems) {
+                    if (item.getStartDate().compareTo(new LocalDate(startDate)) == 0) {
+                        if ((item.getEndDate() == null && endDate == null) || (item.getEndDate() != null && new LocalDate(endDate).compareTo(item.getEndDate()) == 0)) {
+                            if (item.getAmount().compareTo(amount) == 0) {
+                                wasFound = true;
+                                break;
+                            }
+                        }
                     }
                 }
-            }
-        }
 
-        if (!wasFound) {
-            fail();
-        }
-*/
+                if (!wasFound) {
+                    fail();
+                }
+        */
         final DateTime ctd = subscription.getChargedThroughDate();
         assertNotNull(ctd);
         log.info("Checking CTD: " + ctd.toString() + "; clock is " + clock.getUTCNow().toString());
@@ -328,17 +323,17 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
 
     protected AccountData getAccountData(final int billingDay) {
         return new MockAccountBuilder().name(UUID.randomUUID().toString().substring(1, 8))
-        .firstNameLength(6)
-        .email(UUID.randomUUID().toString().substring(1, 8))
-        .phone(UUID.randomUUID().toString().substring(1, 8))
-        .migrated(false)
-        .isNotifiedForInvoices(false)
-        .externalKey(UUID.randomUUID().toString().substring(1, 8))
-        .billingCycleDay(new MockBillCycleDay(billingDay))
-        .currency(Currency.USD)
-        .paymentMethodId(UUID.randomUUID())
-        .timeZone(DateTimeZone.UTC)
-        .build();
+                                       .firstNameLength(6)
+                                       .email(UUID.randomUUID().toString().substring(1, 8))
+                                       .phone(UUID.randomUUID().toString().substring(1, 8))
+                                       .migrated(false)
+                                       .isNotifiedForInvoices(false)
+                                       .externalKey(UUID.randomUUID().toString().substring(1, 8))
+                                       .billingCycleDay(new MockBillCycleDay(billingDay))
+                                       .currency(Currency.USD)
+                                       .paymentMethodId(UUID.randomUUID())
+                                       .timeZone(DateTimeZone.UTC)
+                                       .build();
     }
 
     protected void addMonthsAndCheckForCompletion(final int nbMonth, final NextEvent... events) {
@@ -367,7 +362,6 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
         }, events);
     }
 
-
     protected void addDaysAndCheckForCompletion(final int nbDays, final NextEvent... events) {
         doCallAndCheckForCompletion(new Function<Void, Void>() {
             @Override
@@ -435,18 +429,18 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
     }
 
     protected Subscription createSubscriptionAndCheckForCompletion(final UUID bundleId,
-            final String productName,
-            final ProductCategory productCategory,
-            final BillingPeriod billingPeriod,
-            final NextEvent... events) {
+                                                                   final String productName,
+                                                                   final ProductCategory productCategory,
+                                                                   final BillingPeriod billingPeriod,
+                                                                   final NextEvent... events) {
         return doCallAndCheckForCompletion(new Function<Void, Subscription>() {
             @Override
             public Subscription apply(@Nullable final Void dontcare) {
                 try {
                     final Subscription subscription = entitlementUserApi.createSubscription(bundleId,
-                            new PlanPhaseSpecifier(productName, productCategory, billingPeriod, PriceListSet.DEFAULT_PRICELIST_NAME, null),
-                            null,
-                            callContext);
+                                                                                            new PlanPhaseSpecifier(productName, productCategory, billingPeriod, PriceListSet.DEFAULT_PRICELIST_NAME, null),
+                                                                                            null,
+                                                                                            callContext);
                     assertNotNull(subscription);
                     return subscription;
                 } catch (EntitlementUserApiException e) {
@@ -458,9 +452,9 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
     }
 
     protected Subscription changeSubscriptionAndCheckForCompletion(final Subscription subscription,
-            final String productName,
-            final BillingPeriod billingPeriod,
-            final NextEvent... events) {
+                                                                   final String productName,
+                                                                   final BillingPeriod billingPeriod,
+                                                                   final NextEvent... events) {
         return doCallAndCheckForCompletion(new Function<Void, Subscription>() {
             @Override
             public Subscription apply(@Nullable final Void dontcare) {
@@ -478,8 +472,8 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
     }
 
     protected Subscription cancelSubscriptionAndCheckForCompletion(final Subscription subscription,
-            final DateTime requestedDate,
-            final NextEvent... events) {
+                                                                   final DateTime requestedDate,
+                                                                   final NextEvent... events) {
         return doCallAndCheckForCompletion(new Function<Void, Subscription>() {
             @Override
             public Subscription apply(@Nullable final Void dontcare) {
diff --git a/entitlement/src/main/resources/com/ning/billing/entitlement/ddl.sql b/entitlement/src/main/resources/com/ning/billing/entitlement/ddl.sql
index 913c472..48154ba 100644
--- a/entitlement/src/main/resources/com/ning/billing/entitlement/ddl.sql
+++ b/entitlement/src/main/resources/com/ning/billing/entitlement/ddl.sql
@@ -1,3 +1,5 @@
+/*! SET storage_engine=INNODB */;
+
 DROP TABLE IF EXISTS events;
 DROP TABLE IF EXISTS entitlement_events;
 DROP TABLE IF EXISTS subscription_events;
@@ -22,7 +24,7 @@ CREATE TABLE subscription_events (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE UNIQUE INDEX subscription_events_id ON subscription_events(id);
 CREATE INDEX idx_ent_1 ON subscription_events(subscription_id, is_active, effective_date);
 CREATE INDEX idx_ent_2 ON subscription_events(subscription_id, effective_date, created_date, requested_date,id);
@@ -46,7 +48,7 @@ CREATE TABLE subscriptions (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE UNIQUE INDEX subscriptions_id ON subscriptions(id);
 CREATE INDEX subscriptions_bundle_id ON subscriptions(bundle_id);
 CREATE INDEX subscriptions_tenant_account_record_id ON subscriptions(tenant_record_id, account_record_id);
@@ -65,7 +67,7 @@ CREATE TABLE bundles (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE UNIQUE INDEX bundles_id ON bundles(id);
 CREATE INDEX bundles_key ON bundles(external_key);
 CREATE INDEX bundles_account ON bundles(account_id);
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/glue/MockEngineModuleSql.java b/entitlement/src/test/java/com/ning/billing/entitlement/glue/MockEngineModuleSql.java
index 8c73897..922fa16 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/glue/MockEngineModuleSql.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/glue/MockEngineModuleSql.java
@@ -21,8 +21,8 @@ import org.skife.jdbi.v2.IDBI;
 
 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.dbi.MysqlTestingHelper;
 import com.ning.billing.entitlement.api.timeline.RepairEntitlementLifecycleDao;
 import com.ning.billing.entitlement.engine.dao.EntitlementDao;
 import com.ning.billing.entitlement.engine.dao.MockEntitlementDaoSql;
@@ -44,8 +44,7 @@ public class MockEngineModuleSql extends MockEngineModule {
     }
 
     protected void installDBI() {
-        final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
-        bind(MysqlTestingHelper.class).toInstance(helper);
+        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);

invoice/pom.xml 5(+5 -0)

diff --git a/invoice/pom.xml b/invoice/pom.xml
index 06e28a5..b62895f 100644
--- a/invoice/pom.xml
+++ b/invoice/pom.xml
@@ -111,6 +111,11 @@
             <artifactId>mysql-connector-mxj-db-files</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
     <build>
     </build>
diff --git a/invoice/src/main/resources/com/ning/billing/invoice/ddl.sql b/invoice/src/main/resources/com/ning/billing/invoice/ddl.sql
index 2052006..02bac52 100644
--- a/invoice/src/main/resources/com/ning/billing/invoice/ddl.sql
+++ b/invoice/src/main/resources/com/ning/billing/invoice/ddl.sql
@@ -1,3 +1,5 @@
+/*! SET storage_engine=INNODB */;
+
 DROP TABLE IF EXISTS invoice_items;
 CREATE TABLE invoice_items (
     record_id int(11) unsigned NOT NULL AUTO_INCREMENT,
@@ -20,7 +22,7 @@ CREATE TABLE invoice_items (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE UNIQUE INDEX invoice_items_id ON invoice_items(id);
 CREATE INDEX invoice_items_subscription_id ON invoice_items(subscription_id ASC);
 CREATE INDEX invoice_items_invoice_id ON invoice_items(invoice_id ASC);
@@ -41,7 +43,7 @@ CREATE TABLE invoices (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE UNIQUE INDEX invoices_id ON invoices(id);
 CREATE INDEX invoices_account_target ON invoices(account_id ASC, target_date);
 CREATE INDEX invoices_tenant_account_record_id ON invoices(tenant_record_id, account_record_id);
@@ -52,7 +54,7 @@ CREATE TABLE invoice_payments (
     id char(36) NOT NULL,
     type varchar(24) NOT NULL,    
     invoice_id char(36) NOT NULL,
-    payment_id char(36) COLLATE utf8_bin,
+    payment_id char(36),
     payment_date datetime NOT NULL,
     amount numeric(10,4) NOT NULL,
     currency char(3) NOT NULL,
@@ -63,7 +65,7 @@ CREATE TABLE invoice_payments (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE UNIQUE INDEX invoice_payments_id ON invoice_payments(id);
 CREATE INDEX invoice_payments ON invoice_payments(payment_id);
 CREATE INDEX invoice_payments_reversals ON invoice_payments(linked_invoice_payment_id);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java b/invoice/src/test/java/com/ning/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java
index 4d2ee81..cbb693d 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java
@@ -29,9 +29,7 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeSuite;
 import org.testng.annotations.Test;
 
-import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
 import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.invoice.InvoiceTestSuiteWithEmbeddedDB;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceApiException;
@@ -72,8 +70,7 @@ public class TestDefaultInvoicePaymentApi extends InvoiceTestSuiteWithEmbeddedDB
 
     @BeforeSuite(groups = "slow")
     public void setup() throws IOException {
-        final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
-        final IDBI dbi = helper.getDBI();
+        final IDBI dbi = getDBI();
 
         invoiceSqlDao = dbi.onDemand(InvoiceSqlDao.class);
         invoiceSqlDao.test(internalCallContext);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTestBase.java b/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTestBase.java
index 8ca2f72..2949653 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTestBase.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTestBase.java
@@ -28,7 +28,6 @@ import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 
 import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceApiException;
 import com.ning.billing.invoice.api.InvoiceItem;
@@ -102,8 +101,7 @@ public class InvoiceDaoTestBase extends InvoicingTestBase {
 
         loadSystemPropertiesFromClasspath("/resource.properties");
 
-        final MysqlTestingHelper mysqlTestingHelper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
-        dbi = mysqlTestingHelper.getDBI();
+        dbi = KillbillTestSuiteWithEmbeddedDB.getDBI();
 
         clock = new ClockMock();
 
diff --git a/invoice/src/test/java/com/ning/billing/invoice/glue/InvoiceModuleWithEmbeddedDb.java b/invoice/src/test/java/com/ning/billing/invoice/glue/InvoiceModuleWithEmbeddedDb.java
index b2590f9..154b339 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/glue/InvoiceModuleWithEmbeddedDb.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/glue/InvoiceModuleWithEmbeddedDb.java
@@ -24,7 +24,6 @@ import org.skife.jdbi.v2.IDBI;
 
 import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
 import com.ning.billing.catalog.glue.CatalogModule;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.invoice.api.InvoiceNotifier;
 import com.ning.billing.invoice.notification.MockNextBillingDateNotifier;
 import com.ning.billing.invoice.notification.MockNextBillingDatePoster;
@@ -50,8 +49,6 @@ import static org.testng.Assert.assertNotNull;
 
 public class InvoiceModuleWithEmbeddedDb extends DefaultInvoiceModule {
 
-    private final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
-
     private void installNotificationQueue() {
         bind(NotificationQueueService.class).to(MockNotificationQueueService.class).asEagerSingleton();
     }
@@ -67,7 +64,7 @@ public class InvoiceModuleWithEmbeddedDb extends DefaultInvoiceModule {
     public void configure() {
         loadSystemPropertiesFromClasspath("/resource.properties");
 
-        final IDBI dbi = helper.getDBI();
+        final IDBI dbi = KillbillTestSuiteWithEmbeddedDB.getDBI();
         bind(IDBI.class).toInstance(dbi);
 
         bind(Clock.class).to(DefaultClock.class).asEagerSingleton();
diff --git a/invoice/src/test/java/com/ning/billing/invoice/MockModule.java b/invoice/src/test/java/com/ning/billing/invoice/MockModule.java
index e12e3d5..e8eaa3c 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/MockModule.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/MockModule.java
@@ -26,8 +26,8 @@ import org.skife.jdbi.v2.IDBI;
 import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
 import com.ning.billing.catalog.glue.CatalogModule;
 import com.ning.billing.dbi.DBIProvider;
+import com.ning.billing.dbi.DBTestingHelper;
 import com.ning.billing.dbi.DbiConfig;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.invoice.api.formatters.InvoiceFormatterFactory;
 import com.ning.billing.invoice.api.migration.TestDefaultInvoiceMigrationApi;
 import com.ning.billing.invoice.glue.DefaultInvoiceModule;
@@ -65,8 +65,7 @@ public class MockModule extends AbstractModule {
         install(new TagStoreModule());
         install(new CustomFieldModule());
 
-        final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
-        bind(MysqlTestingHelper.class).toInstance(helper);
+        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);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java b/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
index 3b9a47e..4ea0e9d 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
@@ -33,8 +33,8 @@ import org.testng.annotations.Test;
 import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
 import com.ning.billing.catalog.MockCatalogModule;
 import com.ning.billing.dbi.DBIProvider;
+import com.ning.billing.dbi.DBTestingHelper;
 import com.ning.billing.dbi.DbiConfig;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.invoice.InvoiceDispatcher;
@@ -127,8 +127,7 @@ public class TestNextBillingDateNotifier extends InvoiceTestSuiteWithEmbeddedDB 
                 install(new TemplateModule());
                 install(new TagStoreModule());
 
-                final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
-                bind(MysqlTestingHelper.class).toInstance(helper);
+                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);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java b/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
index 23559e2..2c8ec5a 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
@@ -43,7 +43,6 @@ import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.catalog.api.PhaseType;
 import com.ning.billing.catalog.api.Plan;
 import com.ning.billing.catalog.api.PlanPhase;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.entitlement.api.SubscriptionTransitionType;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.invoice.api.Invoice;
@@ -89,9 +88,6 @@ public class TestInvoiceDispatcher extends InvoicingTestBase {
     private GlobalLocker locker;
 
     @Inject
-    private MysqlTestingHelper helper;
-
-    @Inject
     private NextBillingDateNotifier notifier;
 
     @Inject
@@ -268,7 +264,7 @@ public class TestInvoiceDispatcher extends InvoicingTestBase {
         }
     }
 
-    @Test(groups= "slow")
+    @Test(groups = "slow")
     public void testCreateNextFutureNotificationDate() throws Exception {
 
         final LocalDate startDate = new LocalDate("2012-10-26");
@@ -276,7 +272,7 @@ public class TestInvoiceDispatcher extends InvoicingTestBase {
 
         clock.setTime(new DateTime(2012, 10, 26, 1, 12, 23, DateTimeZone.UTC));
         final InvoiceItemModelDao item = new InvoiceItemModelDao(UUID.randomUUID(), clock.getUTCNow(), InvoiceItemType.RECURRING, UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(),
-                                                           "planName", "phaseName", startDate, endDate, new BigDecimal("23.9"), new BigDecimal("23.9"), Currency.EUR, null);
+                                                                 "planName", "phaseName", startDate, endDate, new BigDecimal("23.9"), new BigDecimal("23.9"), Currency.EUR, null);
 
         final InvoiceNotifier invoiceNotifier = new NullInvoiceNotifier();
         final InvoiceDispatcher dispatcher = new InvoiceDispatcher(generator, accountInternalApi, billingApi, entitlementInternalApi, invoiceDao,
@@ -285,7 +281,7 @@ public class TestInvoiceDispatcher extends InvoicingTestBase {
 
         final DateTime expectedBefore = clock.getUTCNow();
         final Map<UUID, DateTime> result = dispatcher.createNextFutureNotificationDate(Collections.singletonList(item), DateTimeZone.forID("Pacific/Pitcairn"));
-        final DateTime expectedAfter =  clock.getUTCNow();
+        final DateTime expectedAfter = clock.getUTCNow();
 
         Assert.assertEquals(result.size(), 1);
 
@@ -294,13 +290,10 @@ public class TestInvoiceDispatcher extends InvoicingTestBase {
         final LocalDate receivedTargetDate = new LocalDate(receivedDate, DateTimeZone.forID("Pacific/Pitcairn"));
         Assert.assertEquals(receivedTargetDate, endDate);
 
-
-
-        Assert.assertTrue(receivedDate.compareTo(new DateTime(2012, 11, 26, 9 /* 1 + 8 for Pitcairn */ , 12, 23, DateTimeZone.UTC)) >= 0);
+        Assert.assertTrue(receivedDate.compareTo(new DateTime(2012, 11, 26, 9 /* 1 + 8 for Pitcairn */, 12, 23, DateTimeZone.UTC)) >= 0);
         Assert.assertTrue(receivedDate.compareTo(new DateTime(2012, 11, 26, 9, 13, 0, DateTimeZone.UTC)) <= 0);
 
     }
 
-
     //MDW add a test to cover when the account auto-invoice-off tag is present
 }
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java b/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
index 6cda9cb..8e701dd 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
@@ -29,9 +29,7 @@ import org.testng.annotations.BeforeSuite;
 import org.testng.annotations.Test;
 
 import com.ning.billing.ErrorCode;
-import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
 import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.invoice.InvoiceTestSuiteWithEmbeddedDB;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceApiException;
@@ -77,8 +75,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
     public void setup() throws IOException {
         loadSystemPropertiesFromClasspath("/resource.properties");
 
-        final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
-        final IDBI dbi = helper.getDBI();
+        final IDBI dbi = getDBI();
 
         invoiceSqlDao = dbi.onDemand(InvoiceSqlDao.class);
         invoiceSqlDao.test(internalCallContext);
diff --git a/junction/src/main/resources/com/ning/billing/junction/ddl.sql b/junction/src/main/resources/com/ning/billing/junction/ddl.sql
index cf3ddb0..2747e2d 100644
--- a/junction/src/main/resources/com/ning/billing/junction/ddl.sql
+++ b/junction/src/main/resources/com/ning/billing/junction/ddl.sql
@@ -1,3 +1,5 @@
+/*! SET storage_engine=INNODB */;
+
 DROP TABLE IF EXISTS blocking_states;
 CREATE TABLE blocking_states (
     record_id int(11) unsigned NOT NULL AUTO_INCREMENT,
@@ -13,6 +15,6 @@ CREATE TABLE blocking_states (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE INDEX blocking_states_id ON blocking_states(blockable_id);
 CREATE INDEX blocking_states_tenant_account_record_id ON blocking_states(tenant_record_id, account_record_id);
diff --git a/junction/src/test/java/com/ning/billing/junction/api/blocking/TestDefaultBlockingApi.java b/junction/src/test/java/com/ning/billing/junction/api/blocking/TestDefaultBlockingApi.java
index e763464..eeb92dc 100644
--- a/junction/src/test/java/com/ning/billing/junction/api/blocking/TestDefaultBlockingApi.java
+++ b/junction/src/test/java/com/ning/billing/junction/api/blocking/TestDefaultBlockingApi.java
@@ -43,7 +43,7 @@ public class TestDefaultBlockingApi extends JunctionTestSuiteWithEmbeddedDB {
 
     @BeforeMethod(groups = "slow")
     public void setUp() throws Exception {
-        final BlockingStateDao blockingStateDao = new DefaultBlockingStateDao(getMysqlTestingHelper().getDBI());
+        final BlockingStateDao blockingStateDao = new DefaultBlockingStateDao(getDBI());
         blockingApi = new DefaultInternalBlockingApi(blockingStateDao, clock);
     }
 
@@ -51,7 +51,7 @@ public class TestDefaultBlockingApi extends JunctionTestSuiteWithEmbeddedDB {
     public void testSetBlockingStateOnBundle() throws Exception {
         final UUID bundleId = UUID.randomUUID();
         final Long accountRecordId = 123049714L;
-        getMysqlTestingHelper().getDBI().withHandle(new HandleCallback<Void>() {
+        getDBI().withHandle(new HandleCallback<Void>() {
             @Override
             public Void withHandle(final Handle handle) throws Exception {
                 handle.execute("DROP TABLE IF EXISTS bundles;\n" +
@@ -79,7 +79,7 @@ public class TestDefaultBlockingApi extends JunctionTestSuiteWithEmbeddedDB {
 
         Assert.assertEquals(resultState.getStateName(), blockingState.getStateName());
         // Verify the account_record_id was populated
-        getMysqlTestingHelper().getDBI().withHandle(new HandleCallback<Void>() {
+        getDBI().withHandle(new HandleCallback<Void>() {
             @Override
             public Void withHandle(final Handle handle) throws Exception {
                 final List<Map<String, Object>> values = handle.select("select account_record_id from blocking_states where id = ?", bundleId.toString());
diff --git a/meter/src/main/java/com/ning/billing/meter/timeline/persistent/TimelineSqlDao.java b/meter/src/main/java/com/ning/billing/meter/timeline/persistent/TimelineSqlDao.java
index 33e2b1f..c302e20 100644
--- a/meter/src/main/java/com/ning/billing/meter/timeline/persistent/TimelineSqlDao.java
+++ b/meter/src/main/java/com/ning/billing/meter/timeline/persistent/TimelineSqlDao.java
@@ -30,7 +30,7 @@ import org.skife.jdbi.v2.sqlobject.customizers.Mapper;
 import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
 import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
 import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
-import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
+import org.skife.jdbi.v2.sqlobject.stringtemplate.UseStringTemplate3StatementLocator;
 
 import com.ning.billing.meter.timeline.categories.CategoryIdAndMetric;
 import com.ning.billing.meter.timeline.categories.CategoryIdAndMetricBinder;
@@ -46,7 +46,7 @@ import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.callcontext.InternalTenantContextBinder;
 
-@ExternalizedSqlViaStringTemplate3()
+@UseStringTemplate3StatementLocator()
 @RegisterMapper({CategoryIdAndMetricMapper.class, StartTimesMapper.class, SourceIdAndMetricIdMapper.class})
 public interface TimelineSqlDao extends Transactional<TimelineSqlDao>, Transmogrifier {
 
diff --git a/meter/src/main/resources/com/ning/billing/meter/timeline/ddl.sql b/meter/src/main/resources/com/ning/billing/meter/timeline/ddl.sql
index 23f046d..1633b5e 100644
--- a/meter/src/main/resources/com/ning/billing/meter/timeline/ddl.sql
+++ b/meter/src/main/resources/com/ning/billing/meter/timeline/ddl.sql
@@ -1,3 +1,5 @@
+/*! SET storage_engine=INNODB */;
+
 create table sources (
   record_id int(11) unsigned not null auto_increment
 , bundle_id char(36) default null
@@ -10,7 +12,7 @@ create table sources (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 , index created_date_record_id_dx (created_date, record_id)
-) engine = innodb default charset = latin1;
+) default charset = latin1;
 create index sources_tenant_account_record_id on sources(tenant_record_id, account_record_id);
 
 create table event_categories (
@@ -19,7 +21,7 @@ create table event_categories (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 , unique index event_category_unq (event_category)
-) engine = innodb default charset = latin1;
+) default charset = latin1;
 create index event_categories_tenant_record_id on event_categories(tenant_record_id);
 
 create table metrics (
@@ -29,7 +31,7 @@ create table metrics (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 , unique index metric_unq (event_category_id, metric)
-) engine = innodb default charset = latin1;
+) default charset = latin1;
 create index metrics_tenant_record_id on metrics(tenant_record_id);
 
 create table timeline_chunks (
@@ -47,12 +49,12 @@ create table timeline_chunks (
 , primary key(record_id)
 , unique index source_id_timeline_chunk_metric_idx (source_id, metric_id, start_time, aggregation_level)
 , index valid_agg_host_start_time (not_valid, aggregation_level, source_id, metric_id, start_time)
-) engine = innodb default charset = latin1;
+) default charset = latin1;
 
 create table last_start_times (
   time_inserted int not null primary key
 , start_times mediumtext not null
-) engine = innodb default charset = latin1;
+) default charset = latin1;
 
 insert ignore into timeline_chunks(record_id, source_id, metric_id, sample_count, start_time, end_time, in_row_samples, blob_samples)
                            values (0, 0, 0, 0, 0, 0, null, null);
@@ -67,5 +69,5 @@ create table timeline_rolled_up_chunk (
 , account_record_id int(11) unsigned default null
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
-) engine = innodb default charset = latin1;
+) default charset = latin1;
 create index timeline_rolled_up_chunk_tenant_account_record_id on timeline_rolled_up_chunk(tenant_record_id, account_record_id);
diff --git a/overdue/src/test/java/com/ning/billing/overdue/notification/TestOverdueCheckNotifier.java b/overdue/src/test/java/com/ning/billing/overdue/notification/TestOverdueCheckNotifier.java
index d91d213..084e6c6 100644
--- a/overdue/src/test/java/com/ning/billing/overdue/notification/TestOverdueCheckNotifier.java
+++ b/overdue/src/test/java/com/ning/billing/overdue/notification/TestOverdueCheckNotifier.java
@@ -16,9 +16,6 @@
 
 package com.ning.billing.overdue.notification;
 
-import static com.jayway.awaitility.Awaitility.await;
-import static java.util.concurrent.TimeUnit.MINUTES;
-
 import java.io.IOException;
 import java.sql.SQLException;
 import java.util.UUID;
@@ -33,14 +30,10 @@ import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.catalog.DefaultCatalogService;
 import com.ning.billing.catalog.api.CatalogService;
-import com.ning.billing.util.config.CatalogConfig;
-import com.ning.billing.util.config.InvoiceConfig;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.junction.api.Blockable;
@@ -62,8 +55,10 @@ import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.clock.ClockMock;
-import com.ning.billing.util.customfield.dao.DefaultCustomFieldDao;
+import com.ning.billing.util.config.CatalogConfig;
+import com.ning.billing.util.config.InvoiceConfig;
 import com.ning.billing.util.customfield.dao.CustomFieldDao;
+import com.ning.billing.util.customfield.dao.DefaultCustomFieldDao;
 import com.ning.billing.util.email.EmailModule;
 import com.ning.billing.util.email.templates.TemplateModule;
 import com.ning.billing.util.globallocker.GlobalLocker;
@@ -81,6 +76,9 @@ import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Stage;
 
+import static com.jayway.awaitility.Awaitility.await;
+import static java.util.concurrent.TimeUnit.MINUTES;
+
 public class TestOverdueCheckNotifier extends OverdueTestSuiteWithEmbeddedDB {
     private Clock clock;
     private DefaultOverdueCheckNotifier notifier;
@@ -94,7 +92,7 @@ public class TestOverdueCheckNotifier extends OverdueTestSuiteWithEmbeddedDB {
         UUID latestSubscriptionId = null;
 
         public OverdueListenerMock() {
-            super(null, new InternalCallContextFactory(getMysqlTestingHelper().getDBI(), new ClockMock()));
+            super(null, new InternalCallContextFactory(getDBI(), new ClockMock()));
         }
 
         @Override
@@ -126,9 +124,7 @@ public class TestOverdueCheckNotifier extends OverdueTestSuiteWithEmbeddedDB {
                 final CatalogConfig catalogConfig = new ConfigurationObjectFactory(System.getProperties()).build(CatalogConfig.class);
                 bind(CatalogConfig.class).toInstance(catalogConfig);
                 bind(CatalogService.class).to(DefaultCatalogService.class).asEagerSingleton();
-                final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
-                bind(MysqlTestingHelper.class).toInstance(helper);
-                final IDBI dbi = helper.getDBI();
+                final IDBI dbi = getDBI();
                 bind(IDBI.class).toInstance(dbi);
                 bind(TagDao.class).to(DefaultTagDao.class).asEagerSingleton();
                 bind(CustomFieldDao.class).to(DefaultCustomFieldDao.class).asEagerSingleton();
diff --git a/payment/src/main/resources/com/ning/billing/payment/ddl.sql b/payment/src/main/resources/com/ning/billing/payment/ddl.sql
index 14c5246..fbc1279 100644
--- a/payment/src/main/resources/com/ning/billing/payment/ddl.sql
+++ b/payment/src/main/resources/com/ning/billing/payment/ddl.sql
@@ -1,3 +1,5 @@
+/*! SET storage_engine=INNODB */;
+
 DROP TABLE IF EXISTS payments;
 CREATE TABLE payments (
     record_id int(11) unsigned NOT NULL AUTO_INCREMENT,
@@ -18,7 +20,7 @@ CREATE TABLE payments (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY (record_id)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 CREATE UNIQUE INDEX payments_id ON payments(id);
 CREATE INDEX payments_inv ON payments(invoice_id);
 CREATE INDEX payments_accnt ON payments(account_id);
@@ -46,7 +48,7 @@ CREATE TABLE payment_history (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 CREATE INDEX payment_history_target_record_id ON payment_history(target_record_id);
 CREATE INDEX payment_history_tenant_account_record_id ON payment_history(tenant_record_id, account_record_id);
 
@@ -66,7 +68,7 @@ CREATE TABLE payment_attempts (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY (record_id)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 CREATE UNIQUE INDEX payment_attempts_id ON payment_attempts(id);
 CREATE INDEX payment_attempts_payment ON payment_attempts(payment_id);
 CREATE INDEX payment_attempts_tenant_account_record_id ON payment_attempts(tenant_record_id, account_record_id);
@@ -89,7 +91,7 @@ CREATE TABLE payment_attempt_history (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 CREATE INDEX payment_attempt_history_target_record_id ON payment_attempt_history(target_record_id);
 CREATE INDEX payment_attempt_history_tenant_account_record_id ON payment_attempt_history(tenant_record_id, account_record_id);
 
@@ -108,7 +110,7 @@ CREATE TABLE payment_methods (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY (record_id)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 CREATE UNIQUE INDEX payment_methods_id ON payment_methods(id);
 CREATE INDEX payment_methods_active_accnt ON payment_methods(is_active, account_id);
 CREATE INDEX payment_methods_tenant_account_record_id ON payment_methods(tenant_record_id, account_record_id);
@@ -130,7 +132,7 @@ CREATE TABLE payment_method_history (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 CREATE INDEX payment_method_history_target_record_id ON payment_method_history(target_record_id);
 CREATE INDEX payment_method_history_tenant_account_record_id ON payment_method_history(tenant_record_id, account_record_id);
 
@@ -151,7 +153,7 @@ CREATE TABLE refunds (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY (record_id)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 CREATE UNIQUE INDEX refunds_id ON refunds(id);
 CREATE INDEX refunds_pay ON refunds(payment_id);
 CREATE INDEX refunds_accnt ON refunds(account_id);
@@ -176,7 +178,7 @@ CREATE TABLE refund_history (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 CREATE INDEX refund_history_target_record_id ON refund_history(target_record_id);
 CREATE INDEX refund_history_tenant_account_record_id ON refund_history(tenant_record_id, account_record_id);
 
diff --git a/payment/src/test/java/com/ning/billing/payment/dao/TestPaymentDao.java b/payment/src/test/java/com/ning/billing/payment/dao/TestPaymentDao.java
index c574c78..bf50c4c 100644
--- a/payment/src/test/java/com/ning/billing/payment/dao/TestPaymentDao.java
+++ b/payment/src/test/java/com/ning/billing/payment/dao/TestPaymentDao.java
@@ -31,8 +31,8 @@ import org.testng.annotations.Test;
 import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.dbi.DBIProvider;
+import com.ning.billing.dbi.DBTestingHelper;
 import com.ning.billing.dbi.DbiConfig;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.payment.PaymentTestSuiteWithEmbeddedDB;
 import com.ning.billing.payment.api.PaymentStatus;
 import com.ning.billing.payment.dao.RefundModelDao.RefundStatus;
@@ -47,7 +47,7 @@ import static org.testng.Assert.fail;
 public class TestPaymentDao extends PaymentTestSuiteWithEmbeddedDB {
 
     private PaymentDao paymentDao;
-    private MysqlTestingHelper helper;
+    private DBTestingHelper helper;
     private IDBI dbi;
     private Clock clock;
 
@@ -59,7 +59,7 @@ public class TestPaymentDao extends PaymentTestSuiteWithEmbeddedDB {
     }
 
     private void setupDb() {
-        helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
+        helper = KillbillTestSuiteWithEmbeddedDB.getDBTestingHelper();
         if (helper.isUsingLocalInstance()) {
             final DbiConfig config = new ConfigurationObjectFactory(System.getProperties()).build(DbiConfig.class);
             final DBIProvider provider = new DBIProvider(config);

pom.xml 6(+6 -0)

diff --git a/pom.xml b/pom.xml
index 30b5439..75b9495 100644
--- a/pom.xml
+++ b/pom.xml
@@ -299,6 +299,12 @@
                 <scope>test</scope>
             </dependency>
             <dependency>
+                <groupId>com.h2database</groupId>
+                <artifactId>h2</artifactId>
+                <version>1.3.158</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
                 <groupId>org.apache.commons</groupId>
                 <artifactId>commons-email</artifactId>
                 <version>1.2</version>
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java b/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
index d6ae88a..8d7fcab 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
@@ -39,6 +39,7 @@ import com.ning.billing.api.TestApiListener;
 import com.ning.billing.beatrix.glue.BeatrixModule;
 import com.ning.billing.catalog.glue.CatalogModule;
 import com.ning.billing.dbi.DBIProvider;
+import com.ning.billing.dbi.DBTestingHelper;
 import com.ning.billing.dbi.DbiConfig;
 import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.entitlement.glue.DefaultEntitlementModule;
@@ -86,7 +87,7 @@ public class TestJaxrsBase extends KillbillClient {
 
     protected static TestKillbillGuiceListener listener;
 
-    private final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
+    private final DBTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getDBTestingHelper();
 
     private HttpServer server;
     protected TestApiListener busHandler;
@@ -103,10 +104,10 @@ public class TestJaxrsBase extends KillbillClient {
 
     public static class TestKillbillGuiceListener extends KillbillGuiceListener {
 
-        private final MysqlTestingHelper helper;
+        private final DBTestingHelper helper;
         private final Clock clock;
 
-        public TestKillbillGuiceListener(final MysqlTestingHelper helper, final Clock clock) {
+        public TestKillbillGuiceListener(final DBTestingHelper helper, final Clock clock) {
             super();
             this.helper = helper;
             this.clock = clock;
@@ -132,10 +133,10 @@ public class TestJaxrsBase extends KillbillClient {
 
     public static class TestKillbillServerModule extends KillbillServerModule {
 
-        private final MysqlTestingHelper helper;
+        private final DBTestingHelper helper;
         private final Clock clock;
 
-        public TestKillbillServerModule(final MysqlTestingHelper helper, final Clock clock) {
+        public TestKillbillServerModule(final DBTestingHelper helper, final Clock clock) {
             super();
             this.helper = helper;
             this.clock = clock;
@@ -188,7 +189,6 @@ public class TestJaxrsBase extends KillbillClient {
 
         @Override
         protected void configureDao() {
-            bind(MysqlTestingHelper.class).toInstance(helper);
             if (helper.isUsingLocalInstance()) {
                 bind(IDBI.class).toProvider(DBIProvider.class).asEagerSingleton();
                 final DbiConfig config = new ConfigurationObjectFactory(System.getProperties()).build(DbiConfig.class);
diff --git a/server/src/test/java/com/ning/billing/server/security/TestKillbillJdbcRealm.java b/server/src/test/java/com/ning/billing/server/security/TestKillbillJdbcRealm.java
index 7f1fc99..ed0304b 100644
--- a/server/src/test/java/com/ning/billing/server/security/TestKillbillJdbcRealm.java
+++ b/server/src/test/java/com/ning/billing/server/security/TestKillbillJdbcRealm.java
@@ -45,14 +45,14 @@ public class TestKillbillJdbcRealm extends ServerTestSuiteWithEmbeddedDB {
     @BeforeMethod(groups = "slow")
     public void setUp() throws Exception {
         // Create the tenant
-        final DefaultTenantDao tenantDao = new DefaultTenantDao(getMysqlTestingHelper().getDBI());
+        final DefaultTenantDao tenantDao = new DefaultTenantDao(getDBI());
         tenant = new DefaultTenant(UUID.randomUUID(), null, null, UUID.randomUUID().toString(),
                                    UUID.randomUUID().toString(), UUID.randomUUID().toString());
         tenantDao.create(new TenantModelDao(tenant), internalCallContext);
 
         // Setup the security manager
         final BoneCPConfig dbConfig = new BoneCPConfig();
-        dbConfig.setJdbcUrl(getMysqlTestingHelper().getJdbcConnectionString());
+        dbConfig.setJdbcUrl(getDBTestingHelper().getJdbcConnectionString());
         dbConfig.setUsername(MysqlTestingHelper.USERNAME);
         dbConfig.setPassword(MysqlTestingHelper.PASSWORD);
 
diff --git a/tenant/src/main/resources/com/ning/billing/tenant/ddl.sql b/tenant/src/main/resources/com/ning/billing/tenant/ddl.sql
index 664a2e0..82b705d 100644
--- a/tenant/src/main/resources/com/ning/billing/tenant/ddl.sql
+++ b/tenant/src/main/resources/com/ning/billing/tenant/ddl.sql
@@ -1,3 +1,5 @@
+/*! SET storage_engine=INNODB */;
+
 DROP TABLE IF EXISTS tenants;
 CREATE TABLE tenants (
     record_id int(11) unsigned NOT NULL AUTO_INCREMENT,
@@ -11,7 +13,7 @@ CREATE TABLE tenants (
     updated_date datetime DEFAULT NULL,
     updated_by varchar(50) DEFAULT NULL,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE UNIQUE INDEX tenants_id ON tenants(id);
 CREATE UNIQUE INDEX tenants_api_key ON tenants(api_key);
 
@@ -29,5 +31,5 @@ CREATE TABLE tenant_kvs (
    updated_date datetime DEFAULT NULL,
    updated_by varchar(50) DEFAULT NULL,
    PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE INDEX tenant_kvs_key ON tenant_kvs(tenant_key);
diff --git a/tenant/src/test/java/com/ning/billing/tenant/dao/TestDefaultTenantDao.java b/tenant/src/test/java/com/ning/billing/tenant/dao/TestDefaultTenantDao.java
index b5e95ed..b8594bf 100644
--- a/tenant/src/test/java/com/ning/billing/tenant/dao/TestDefaultTenantDao.java
+++ b/tenant/src/test/java/com/ning/billing/tenant/dao/TestDefaultTenantDao.java
@@ -33,7 +33,7 @@ public class TestDefaultTenantDao extends TenantTestSuiteWithEmbeddedDb {
 
     @Test(groups = "slow")
     public void testWeCanStoreAndMatchCredentials() throws Exception {
-        final DefaultTenantDao tenantDao = new DefaultTenantDao(getMysqlTestingHelper().getDBI());
+        final DefaultTenantDao tenantDao = new DefaultTenantDao(getDBI());
 
         final DefaultTenant tenant = new DefaultTenant(UUID.randomUUID(), null, null, UUID.randomUUID().toString(),
                                                        UUID.randomUUID().toString(), UUID.randomUUID().toString());
@@ -56,7 +56,7 @@ public class TestDefaultTenantDao extends TenantTestSuiteWithEmbeddedDb {
 
     @Test(groups = "slow")
     public void testTenantKeyValue() throws Exception {
-        final DefaultTenantDao tenantDao = new DefaultTenantDao(getMysqlTestingHelper().getDBI());
+        final DefaultTenantDao tenantDao = new DefaultTenantDao(getDBI());
         final DefaultTenant tenant = new DefaultTenant(UUID.randomUUID(), null, null, UUID.randomUUID().toString(),
                                                        UUID.randomUUID().toString(), UUID.randomUUID().toString());
         tenantDao.create(new TenantModelDao(tenant), internalCallContext);
diff --git a/usage/src/main/resources/com/ning/billing/usage/ddl.sql b/usage/src/main/resources/com/ning/billing/usage/ddl.sql
index c2cd87c..9422d50 100644
--- a/usage/src/main/resources/com/ning/billing/usage/ddl.sql
+++ b/usage/src/main/resources/com/ning/billing/usage/ddl.sql
@@ -1,3 +1,5 @@
+/*! SET storage_engine=INNODB */;
+
 DROP TABLE IF EXISTS rolled_up_usage;
 CREATE TABLE rolled_up_usage (
     record_id int(11) unsigned NOT NULL AUTO_INCREMENT,
@@ -12,7 +14,7 @@ CREATE TABLE rolled_up_usage (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE UNIQUE INDEX rolled_up_usage_id ON rolled_up_usage(id);
 CREATE INDEX rolled_up_usage_subscription_id ON rolled_up_usage(subscription_id ASC);
 CREATE INDEX rolled_up_usage_tenant_account_record_id ON rolled_up_usage(tenant_record_id, account_record_id);

util/pom.xml 5(+5 -0)

diff --git a/util/pom.xml b/util/pom.xml
index 743c8e7..f2f73d1 100644
--- a/util/pom.xml
+++ b/util/pom.xml
@@ -53,6 +53,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>com.google.inject</groupId>
             <artifactId>guice</artifactId>
         </dependency>
diff --git a/util/src/main/resources/com/ning/billing/util/ddl.sql b/util/src/main/resources/com/ning/billing/util/ddl.sql
index 404ba91..157001b 100644
--- a/util/src/main/resources/com/ning/billing/util/ddl.sql
+++ b/util/src/main/resources/com/ning/billing/util/ddl.sql
@@ -1,3 +1,5 @@
+/*! SET storage_engine=INNODB */;
+
 DROP TABLE IF EXISTS custom_fields;
 CREATE TABLE custom_fields (
     record_id int(11) unsigned NOT NULL AUTO_INCREMENT,
@@ -13,7 +15,7 @@ CREATE TABLE custom_fields (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE UNIQUE INDEX custom_fields_id ON custom_fields(id);
 CREATE INDEX custom_fields_object_id_object_type ON custom_fields(object_id, object_type);
 CREATE UNIQUE INDEX custom_fields_unique ON custom_fields(object_id, object_type, field_name);
@@ -36,7 +38,7 @@ CREATE TABLE custom_field_history (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE INDEX custom_field_history_target_record_id ON custom_field_history(target_record_id);
 CREATE INDEX custom_field_history_object_id_object_type ON custom_fields(object_id, object_type);
 CREATE INDEX custom_field_history_tenant_account_record_id ON custom_field_history(tenant_record_id, account_record_id);
@@ -54,7 +56,7 @@ CREATE TABLE tag_definitions (
     updated_date datetime NOT NULL,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE UNIQUE INDEX tag_definitions_id ON tag_definitions(id);
 CREATE INDEX tag_definitions_tenant_record_id ON tag_definitions(tenant_record_id);
 
@@ -74,7 +76,7 @@ CREATE TABLE tag_definition_history (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE INDEX tag_definition_history_id ON tag_definition_history(id);
 CREATE INDEX tag_definition_history_target_record_id ON tag_definition_history(target_record_id);
 CREATE INDEX tag_definition_history_name ON tag_definition_history(name);
@@ -95,7 +97,7 @@ CREATE TABLE tags (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE = innodb;
+);
 CREATE UNIQUE INDEX tags_id ON tags(id);
 CREATE INDEX tags_by_object ON tags(object_id);
 CREATE INDEX tags_tenant_account_record_id ON tags(tenant_record_id, account_record_id);
@@ -117,7 +119,7 @@ CREATE TABLE tag_history (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE = innodb;
+);
 CREATE INDEX tag_history_target_record_id ON tag_history(target_record_id);
 CREATE INDEX tag_history_by_object ON tags(object_id);
 CREATE INDEX tag_history_tenant_account_record_id ON tag_history(tenant_record_id, account_record_id);
@@ -139,7 +141,7 @@ CREATE TABLE notifications (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE UNIQUE INDEX notifications_id ON notifications(id);
 CREATE INDEX  `idx_comp_where` ON notifications (`effective_date`, `queue_name`, `processing_state`,`processing_owner`,`processing_available_date`);
 CREATE INDEX  `idx_update` ON notifications (`processing_state`,`processing_owner`,`processing_available_date`);
@@ -155,10 +157,12 @@ CREATE TABLE claimed_notifications (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE INDEX claimed_notifications_tenant_account_record_id ON claimed_notifications(tenant_record_id, account_record_id);
 
 DROP TABLE IF EXISTS audit_log;
+/*! SET storage_engine=INNODB */;
+
 CREATE TABLE audit_log (
     record_id int(11) unsigned NOT NULL AUTO_INCREMENT,
     id char(36) NOT NULL,
@@ -173,7 +177,7 @@ CREATE TABLE audit_log (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE INDEX audit_log_fetch_target_record_id ON audit_log(table_name, target_record_id);
 CREATE INDEX audit_log_user_name ON audit_log(created_by);
 CREATE INDEX audit_log_tenant_account_record_id ON audit_log(tenant_record_id, account_record_id);
@@ -191,7 +195,7 @@ CREATE TABLE bus_events (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE INDEX  `idx_bus_where` ON bus_events (`processing_state`,`processing_owner`,`processing_available_date`);
 CREATE INDEX bus_events_tenant_account_record_id ON bus_events(tenant_record_id, account_record_id);
 
@@ -204,5 +208,5 @@ CREATE TABLE claimed_bus_events (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE=innodb;
+);
 CREATE INDEX claimed_bus_events_tenant_account_record_id ON claimed_bus_events(tenant_record_id, account_record_id);
diff --git a/util/src/main/resources/com/ning/billing/util/notificationq/dao/NotificationSqlDao.sql.stg b/util/src/main/resources/com/ning/billing/util/notificationq/dao/NotificationSqlDao.sql.stg
index 8287ea4..f0d9187 100644
--- a/util/src/main/resources/com/ning/billing/util/notificationq/dao/NotificationSqlDao.sql.stg
+++ b/util/src/main/resources/com/ning/billing/util/notificationq/dao/NotificationSqlDao.sql.stg
@@ -20,7 +20,6 @@ getReadyNotifications() ::= <<
       , account_record_id
       , tenant_record_id
     from notifications
-    FORCE INDEX (idx_comp_where)
     where
       effective_date \<= :now
       and queue_name = :queueName
diff --git a/util/src/test/java/com/ning/billing/dbi/DBTestingHelper.java b/util/src/test/java/com/ning/billing/dbi/DBTestingHelper.java
new file mode 100644
index 0000000..35e3590
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/dbi/DBTestingHelper.java
@@ -0,0 +1,180 @@
+/*
+ * Copyright 2010-2012 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.dbi;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.skife.jdbi.v2.DBI;
+import org.skife.jdbi.v2.Handle;
+import org.skife.jdbi.v2.IDBI;
+import org.skife.jdbi.v2.tweak.HandleCallback;
+import org.skife.jdbi.v2.util.StringMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.ning.billing.util.io.IOUtils;
+
+import com.google.common.io.Resources;
+
+public abstract class DBTestingHelper {
+
+    private static final Logger log = LoggerFactory.getLogger(DBTestingHelper.class);
+
+    public static final String DB_NAME = "killbill";
+    public static final String USERNAME = "root";
+    public static final String PASSWORD = "root";
+
+    // Discover dynamically list of all tables in that database;
+    protected List<String> allTables;
+    protected IDBI dbiInstance = null;
+
+    public synchronized IDBI getDBI() {
+        if (dbiInstance == null) {
+            final String dbiString = getJdbcConnectionString();
+            dbiInstance = new DBIProvider(dbiString, USERNAME, PASSWORD).get();
+        }
+        return dbiInstance;
+    }
+
+    public void initDb() throws IOException {
+        // We always want the accounts and tenants table
+        initDb("drop table if exists accounts;" +
+               "CREATE TABLE accounts (\n" +
+               "    record_id int(11) unsigned NOT NULL AUTO_INCREMENT,\n" +
+               "    id char(36) NOT NULL,\n" +
+               "    external_key varchar(128) NULL,\n" +
+               "    email varchar(128) NOT NULL,\n" +
+               "    name varchar(100) NOT NULL,\n" +
+               "    first_name_length int NOT NULL,\n" +
+               "    currency char(3) DEFAULT NULL,\n" +
+               "    billing_cycle_day_local int DEFAULT NULL,\n" +
+               "    billing_cycle_day_utc int DEFAULT NULL,\n" +
+               "    payment_method_id char(36) DEFAULT NULL,\n" +
+               "    time_zone varchar(50) DEFAULT NULL,\n" +
+               "    locale varchar(5) DEFAULT NULL,\n" +
+               "    address1 varchar(100) DEFAULT NULL,\n" +
+               "    address2 varchar(100) DEFAULT NULL,\n" +
+               "    company_name varchar(50) DEFAULT NULL,\n" +
+               "    city varchar(50) DEFAULT NULL,\n" +
+               "    state_or_province varchar(50) DEFAULT NULL,\n" +
+               "    country varchar(50) DEFAULT NULL,\n" +
+               "    postal_code varchar(16) DEFAULT NULL,\n" +
+               "    phone varchar(25) DEFAULT NULL,\n" +
+               "    migrated bool DEFAULT false,\n" +
+               "    is_notified_for_invoices boolean NOT NULL,\n" +
+               "    created_date datetime NOT NULL,\n" +
+               "    created_by varchar(50) NOT NULL,\n" +
+               "    updated_date datetime DEFAULT NULL,\n" +
+               "    updated_by varchar(50) DEFAULT NULL,\n" +
+               "    tenant_record_id int(11) unsigned default null,\n" +
+               "    PRIMARY KEY(record_id)\n" +
+               ");");
+        initDb("drop table if exists tenants; create table tenants(record_id int(11) unsigned not null auto_increment, id char(36) not null, primary key(record_id));");
+
+        // We always want the basic tables when we do account_record_id lookups (e.g. for custom fields, tags or junction)
+        initDb("drop table if exists bundles; create table bundles(record_id int(11) unsigned not null auto_increment, id char(36) not null, " +
+               "account_record_id int(11) unsigned not null, tenant_record_id int(11) unsigned default 0, primary key(record_id));");
+        initDb("drop table if exists subscriptions; create table subscriptions(record_id int(11) unsigned not null auto_increment, id char(36) not null, " +
+               "account_record_id int(11) unsigned not null, tenant_record_id int(11) unsigned default 0, primary key(record_id));");
+
+        for (final String pack : new String[]{"account", "analytics", "beatrix", "entitlement", "util", "payment", "invoice", "junction", "usage", "meter", "tenant"}) {
+            for (final String ddlFile : new String[]{"ddl.sql", "ddl_test.sql"}) {
+                final String ddl;
+                try {
+                    ddl = IOUtils.toString(Resources.getResource("com/ning/billing/" + pack + "/" + ddlFile).openStream());
+                } catch (final IllegalArgumentException ignored) {
+                    // The test doesn't have this module ddl in the classpath - that's fine
+                    continue;
+                }
+                initDb(ddl);
+            }
+        }
+    }
+
+    public void initDb(final String ddl) throws IOException {
+        if (isUsingLocalInstance()) {
+            return;
+        }
+        final IDBI dbi = getDBI();
+        dbi.withHandle(new HandleCallback<Void>() {
+            @Override
+            public Void withHandle(final Handle handle) throws Exception {
+                log.debug("Executing DDL script: " + ddl);
+                handle.createScript(ddl).execute();
+                return null;
+            }
+        });
+    }
+
+    public synchronized List<String> fetchAllTables() {
+        if (allTables == null) {
+            final String dbiString = getInformationSchemaJdbcConnectionString();
+            final IDBI cleanupDbi = new DBI(dbiString, USERNAME, PASSWORD);
+
+            final List<String> tables = cleanupDbi.withHandle(new HandleCallback<List<String>>() {
+
+                @Override
+                public List<String> withHandle(final Handle h) throws Exception {
+                    return h.createQuery("select table_name from tables where table_schema = :table_schema and table_type = 'BASE TABLE';")
+                            .bind("table_schema", DB_NAME)
+                            .map(new StringMapper())
+                            .list();
+                }
+            });
+            allTables = tables;
+        }
+        return allTables;
+    }
+
+    public void cleanupAllTables() {
+        final List<String> tablesToCleanup = fetchAllTables();
+        for (final String tableName : tablesToCleanup) {
+            cleanupTable(tableName);
+        }
+    }
+
+    public void cleanupTable(final String table) {
+        log.debug("Deleting table: " + table);
+        final IDBI dbi = getDBI();
+        dbi.withHandle(new HandleCallback<Void>() {
+            @Override
+            public Void withHandle(final Handle handle) throws Exception {
+                handle.execute("truncate table " + table);
+                return null;
+            }
+        });
+    }
+
+    public String getDbName() {
+        return DB_NAME;
+    }
+
+    public abstract boolean isUsingLocalInstance();
+
+    // For debugging
+    public abstract String getConnectionString();
+
+    // To create the DBI
+    public abstract String getJdbcConnectionString();
+
+    public abstract String getInformationSchemaJdbcConnectionString();
+
+    public abstract void start() throws IOException;
+
+    public abstract void stop();
+}
diff --git a/util/src/test/java/com/ning/billing/dbi/H2TestingHelper.java b/util/src/test/java/com/ning/billing/dbi/H2TestingHelper.java
new file mode 100644
index 0000000..9717116
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/dbi/H2TestingHelper.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2010-2012 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.dbi;
+
+import java.io.IOException;
+
+import org.testng.Assert;
+
+public class H2TestingHelper extends DBTestingHelper {
+
+    static {
+        try {
+            Class.forName("org.h2.Driver");
+        } catch (ClassNotFoundException e) {
+            Assert.fail(e.toString());
+        }
+    }
+
+    @Override
+    public boolean isUsingLocalInstance() {
+        return false;
+    }
+
+    @Override
+    public String getConnectionString() {
+        return "No connection string (in memory)";
+    }
+
+    @Override
+    public String getJdbcConnectionString() {
+        return "jdbc:h2:mem:" + DB_NAME + ";MODE=MYSQL";
+    }
+
+    @Override
+    public String getInformationSchemaJdbcConnectionString() {
+        return "jdbc:h2:mem:foo;MODE=MYSQL;SCHEMA_SEARCH_PATH=INFORMATION_SCHEMA";
+    }
+
+    @Override
+    public void start() throws IOException {
+    }
+
+    @Override
+    public void stop() {
+    }
+}
diff --git a/util/src/test/java/com/ning/billing/dbi/MysqlTestingHelper.java b/util/src/test/java/com/ning/billing/dbi/MysqlTestingHelper.java
index b5105a9..52b4be0 100644
--- a/util/src/test/java/com/ning/billing/dbi/MysqlTestingHelper.java
+++ b/util/src/test/java/com/ning/billing/dbi/MysqlTestingHelper.java
@@ -22,39 +22,24 @@ import java.io.IOException;
 import java.io.PrintStream;
 import java.net.ServerSocket;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
-import org.skife.jdbi.v2.DBI;
-import org.skife.jdbi.v2.Handle;
-import org.skife.jdbi.v2.IDBI;
-import org.skife.jdbi.v2.tweak.HandleCallback;
-import org.skife.jdbi.v2.util.StringMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
 
-import com.ning.billing.util.io.IOUtils;
-
-import com.google.common.io.Resources;
 import com.mysql.management.MysqldResource;
 import com.mysql.management.MysqldResourceI;
 
 /**
  * Utility class to embed MySQL for testing purposes
  */
-public class MysqlTestingHelper {
+public class MysqlTestingHelper extends DBTestingHelper {
 
     public static final String USE_LOCAL_DB_PROP = "com.ning.billing.dbi.test.useLocalDb";
 
     private static final Logger log = LoggerFactory.getLogger(MysqlTestingHelper.class);
 
-    public static final String DB_NAME = "killbill";
-    public static final String USERNAME = "root";
-    public static final String PASSWORD = "root";
-
-    // Discover dynamically list of all tables in that database;
-    private List<String> allTables;
     private File dbDir;
     private File dataDir;
     private MysqldResource mysqldResource;
@@ -76,11 +61,27 @@ public class MysqlTestingHelper {
         }
     }
 
+    @Override
     public boolean isUsingLocalInstance() {
         return (System.getProperty(USE_LOCAL_DB_PROP) != null);
     }
 
-    public void startMysql() throws IOException {
+    @Override
+    public String getConnectionString() {
+        return String.format("mysql -u%s -p%s -P%s -S%s/mysql.sock %s", USERNAME, PASSWORD, port, dataDir, DB_NAME);
+    }
+
+    @Override
+    public String getJdbcConnectionString() {
+        return "jdbc:mysql://localhost:" + port + "/" + DB_NAME + "?createDatabaseIfNotExist=true&allowMultiQueries=true";
+    }
+
+    @Override
+    public String getInformationSchemaJdbcConnectionString() {
+        return "jdbc:mysql://localhost:" + port + "/information_schema";
+    }
+
+    public void start() throws IOException {
         if (isUsingLocalInstance()) {
             return;
         }
@@ -112,57 +113,7 @@ public class MysqlTestingHelper {
         }
     }
 
-    public String getConnectionString() {
-        return String.format("mysql -u%s -p%s -P%s -S%s/mysql.sock %s", USERNAME, PASSWORD, port, dataDir, DB_NAME);
-    }
-
-    public void cleanupTable(final String table) {
-
-        if (!isUsingLocalInstance() && (mysqldResource == null || !mysqldResource.isRunning())) {
-            log.error("Asked to cleanup table " + table + " but MySQL is not running!");
-            return;
-        }
-
-        log.debug("Deleting table: " + table);
-        final IDBI dbi = getDBI();
-        dbi.withHandle(new HandleCallback<Void>() {
-            @Override
-            public Void withHandle(final Handle handle) throws Exception {
-                handle.execute("truncate " + table);
-                return null;
-            }
-        });
-    }
-
-    public void cleanupAllTables() {
-        final List<String> tablesToCleanup = fetchAllTables();
-        for (final String tableName : tablesToCleanup) {
-            cleanupTable(tableName);
-        }
-    }
-
-    public synchronized List<String> fetchAllTables() {
-
-        if (allTables == null) {
-            final String dbiString = "jdbc:mysql://localhost:" + port + "/information_schema";
-            final IDBI cleanupDbi = new DBI(dbiString, USERNAME, PASSWORD);
-
-            final List<String> tables = cleanupDbi.withHandle(new HandleCallback<List<String>>() {
-
-                @Override
-                public List<String> withHandle(final Handle h) throws Exception {
-                    return h.createQuery("select table_name from tables where table_schema = :table_schema and table_type = 'BASE TABLE';")
-                            .bind("table_schema", DB_NAME)
-                            .map(new StringMapper())
-                            .list();
-                }
-            });
-            allTables = tables;
-        }
-        return allTables;
-    }
-
-    public void stopMysql() {
+    public void stop() {
         try {
             if (mysqldResource != null) {
                 mysqldResource.shutdown();
@@ -175,94 +126,6 @@ public class MysqlTestingHelper {
         }
     }
 
-    private IDBI dbiInstance = null;
-
-    public synchronized IDBI getDBI() {
-        if (dbiInstance == null) {
-            final String dbiString = getJdbcConnectionString() + "?createDatabaseIfNotExist=true&allowMultiQueries=true";
-            dbiInstance = new DBIProvider(dbiString, USERNAME, PASSWORD).get();
-        }
-        return dbiInstance;
-    }
-
-    public String getJdbcConnectionString() {
-        return "jdbc:mysql://localhost:" + port + "/" + DB_NAME;
-    }
-
-    public void initDb() throws IOException {
-        // We always want the accounts and tenants table
-        initDb("drop table if exists accounts;" +
-               "CREATE TABLE accounts (\n" +
-               "    record_id int(11) unsigned NOT NULL AUTO_INCREMENT,\n" +
-               "    id char(36) NOT NULL,\n" +
-               "    external_key varchar(128) NULL,\n" +
-               "    email varchar(128) NOT NULL,\n" +
-               "    name varchar(100) NOT NULL,\n" +
-               "    first_name_length int NOT NULL,\n" +
-               "    currency char(3) DEFAULT NULL,\n" +
-               "    billing_cycle_day_local int DEFAULT NULL,\n" +
-               "    billing_cycle_day_utc int DEFAULT NULL,\n" +
-               "    payment_method_id char(36) DEFAULT NULL,\n" +
-               "    time_zone varchar(50) DEFAULT NULL,\n" +
-               "    locale varchar(5) DEFAULT NULL,\n" +
-               "    address1 varchar(100) DEFAULT NULL,\n" +
-               "    address2 varchar(100) DEFAULT NULL,\n" +
-               "    company_name varchar(50) DEFAULT NULL,\n" +
-               "    city varchar(50) DEFAULT NULL,\n" +
-               "    state_or_province varchar(50) DEFAULT NULL,\n" +
-               "    country varchar(50) DEFAULT NULL,\n" +
-               "    postal_code varchar(16) DEFAULT NULL,\n" +
-               "    phone varchar(25) DEFAULT NULL,\n" +
-               "    migrated bool DEFAULT false,\n" +
-               "    is_notified_for_invoices boolean NOT NULL,\n" +
-               "    created_date datetime NOT NULL,\n" +
-               "    created_by varchar(50) NOT NULL,\n" +
-               "    updated_date datetime DEFAULT NULL,\n" +
-               "    updated_by varchar(50) DEFAULT NULL,\n" +
-               "    tenant_record_id int(11) unsigned default null,\n" +
-               "    PRIMARY KEY(record_id)\n" +
-               ") ENGINE=innodb;");
-        initDb("drop table if exists tenants; create table tenants(record_id int(11) unsigned not null auto_increment, id char(36) not null, primary key(record_id)) engine=innodb;");
-
-        // We always want the basic tables when we do account_record_id lookups (e.g. for custom fields, tags or junction)
-        initDb("drop table if exists bundles; create table bundles(record_id int(11) unsigned not null auto_increment, id char(36) not null, " +
-               "account_record_id int(11) unsigned not null, tenant_record_id int(11) unsigned default 0, primary key(record_id)) engine=innodb;");
-        initDb("drop table if exists subscriptions; create table subscriptions(record_id int(11) unsigned not null auto_increment, id char(36) not null, " +
-               "account_record_id int(11) unsigned not null, tenant_record_id int(11) unsigned default 0, primary key(record_id)) engine=innodb;");
-
-        for (final String pack : new String[]{"account", "analytics", "beatrix", "entitlement", "util", "payment", "invoice", "junction", "tenant"}) {
-            for (final String ddlFile : new String[]{"ddl.sql", "ddl_test.sql"}) {
-                final String ddl;
-                try {
-                    ddl = IOUtils.toString(Resources.getResource("com/ning/billing/" + pack + "/" + ddlFile).openStream());
-                } catch (final IllegalArgumentException ignored) {
-                    // The test doesn't have this module ddl in the classpath - that's fine
-                    continue;
-                }
-                initDb(ddl);
-            }
-        }
-    }
-
-    public void initDb(final String ddl) throws IOException {
-        if (isUsingLocalInstance()) {
-            return;
-        }
-        final IDBI dbi = getDBI();
-        dbi.withHandle(new HandleCallback<Void>() {
-            @Override
-            public Void withHandle(final Handle handle) throws Exception {
-                log.debug("Executing DDL script: " + ddl);
-                handle.createScript(ddl).execute();
-                return null;
-            }
-        });
-    }
-
-    public String getDbName() {
-        return DB_NAME;
-    }
-
     public static boolean deleteRecursive(final File path) throws FileNotFoundException {
         if (!path.exists()) {
             throw new FileNotFoundException(path.getAbsolutePath());
diff --git a/util/src/test/java/com/ning/billing/KillbillTestSuite.java b/util/src/test/java/com/ning/billing/KillbillTestSuite.java
index b0d009d..667937e 100644
--- a/util/src/test/java/com/ning/billing/KillbillTestSuite.java
+++ b/util/src/test/java/com/ning/billing/KillbillTestSuite.java
@@ -19,8 +19,6 @@ package com.ning.billing;
 import java.lang.reflect.Method;
 import java.util.UUID;
 
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.ITestResult;
diff --git a/util/src/test/java/com/ning/billing/KillbillTestSuiteWithEmbeddedDB.java b/util/src/test/java/com/ning/billing/KillbillTestSuiteWithEmbeddedDB.java
index 264282d..cde037c 100644
--- a/util/src/test/java/com/ning/billing/KillbillTestSuiteWithEmbeddedDB.java
+++ b/util/src/test/java/com/ning/billing/KillbillTestSuiteWithEmbeddedDB.java
@@ -20,23 +20,44 @@ import java.io.IOException;
 import java.net.URISyntaxException;
 import java.sql.SQLException;
 
+import org.skife.jdbi.v2.IDBI;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterSuite;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.BeforeSuite;
 
+import com.ning.billing.dbi.DBTestingHelper;
+import com.ning.billing.dbi.H2TestingHelper;
 import com.ning.billing.dbi.MysqlTestingHelper;
 
 public class KillbillTestSuiteWithEmbeddedDB extends KillbillTestSuite {
 
-    protected static final MysqlTestingHelper helper = new MysqlTestingHelper();
+    private static final Logger log = LoggerFactory.getLogger(KillbillTestSuiteWithEmbeddedDB.class);
 
-    public static MysqlTestingHelper getMysqlTestingHelper() {
+    protected static DBTestingHelper helper;
+
+    static {
+        if ("true".equals(System.getProperty("com.ning.billing.dbi.test.h2"))) {
+            log.info("Using h2 as the embedded database");
+            helper = new H2TestingHelper();
+        } else {
+            log.info("Using MySQL as the embedded database");
+            helper = new MysqlTestingHelper();
+        }
+    }
+
+    public static DBTestingHelper getDBTestingHelper() {
         return helper;
     }
 
+    public static IDBI getDBI() {
+        return helper.getDBI();
+    }
+
     @BeforeSuite(groups = "slow")
     public void startMysqlBeforeTestSuite() throws IOException, ClassNotFoundException, SQLException, URISyntaxException {
-        helper.startMysql();
+        helper.start();
         helper.initDb();
         helper.cleanupAllTables();
     }
@@ -52,15 +73,15 @@ public class KillbillTestSuiteWithEmbeddedDB extends KillbillTestSuite {
     @AfterSuite(groups = "slow")
     public void shutdownMysqlAfterTestSuite() throws IOException, ClassNotFoundException, SQLException, URISyntaxException {
         if (hasFailed()) {
-            log.error("*************************************************************************************************");
-            log.error("*** TESTS HAVE FAILED - LEAVING MySQL RUNNING FOR DEBUGGING - MAKE SURE TO KILL IT ONCE DONE ****");
+            log.error("**********************************************************************************************");
+            log.error("*** TESTS HAVE FAILED - LEAVING DB RUNNING FOR DEBUGGING - MAKE SURE TO KILL IT ONCE DONE ****");
             log.error(helper.getConnectionString());
-            log.error("*************************************************************************************************");
+            log.error("**********************************************************************************************");
             return;
         }
 
         try {
-            helper.stopMysql();
+            helper.stop();
         } catch (Exception ignored) {
         }
     }
diff --git a/util/src/test/java/com/ning/billing/mock/glue/MockDbHelperModule.java b/util/src/test/java/com/ning/billing/mock/glue/MockDbHelperModule.java
index e8beb2d..9ec79fd 100644
--- a/util/src/test/java/com/ning/billing/mock/glue/MockDbHelperModule.java
+++ b/util/src/test/java/com/ning/billing/mock/glue/MockDbHelperModule.java
@@ -21,8 +21,8 @@ import org.skife.jdbi.v2.IDBI;
 
 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.dbi.MysqlTestingHelper;
 
 import com.google.inject.AbstractModule;
 
@@ -33,8 +33,7 @@ public class MockDbHelperModule extends AbstractModule {
     }
 
     public void installMysqlTestingHelper() {
-        final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
-        bind(MysqlTestingHelper.class).toInstance(helper);
+        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);
diff --git a/util/src/test/java/com/ning/billing/mock/glue/TestDbiModule.java b/util/src/test/java/com/ning/billing/mock/glue/TestDbiModule.java
index 644afee..77dc191 100644
--- a/util/src/test/java/com/ning/billing/mock/glue/TestDbiModule.java
+++ b/util/src/test/java/com/ning/billing/mock/glue/TestDbiModule.java
@@ -21,15 +21,14 @@ import org.skife.jdbi.v2.IDBI;
 
 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.dbi.MysqlTestingHelper;
 
 import com.google.inject.AbstractModule;
 
 public class TestDbiModule extends AbstractModule {
     protected void configure() {
-        final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
-        bind(MysqlTestingHelper.class).toInstance(helper);
+        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);
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 2b2251b..6d56561 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
@@ -23,22 +23,20 @@ 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.dbi.MysqlTestingHelper;
 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.google.inject.AbstractModule;
-import com.google.inject.Inject;
 
 @Guice(modules = TestPersistentEventBus.PersistentBusModuleTest.class)
 public class TestPersistentEventBus extends TestEventBusBase {
-    @Inject
-    private MysqlTestingHelper helper;
 
     public static class PersistentBusModuleTest extends AbstractModule {
+
         @Override
         protected void configure() {
             //System.setProperty("com.ning.billing.dbi.test.useLocalDb", "true");
@@ -46,8 +44,7 @@ public class TestPersistentEventBus extends TestEventBusBase {
             bind(Clock.class).to(ClockMock.class).asEagerSingleton();
             bind(ClockMock.class).asEagerSingleton();
 
-            final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
-            bind(MysqlTestingHelper.class).toInstance(helper);
+            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);
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 20e5d3e..e62e51f 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
@@ -35,7 +35,7 @@ public class TestInternalCallContextFactory extends UtilTestSuiteWithEmbeddedDB 
 
     @BeforeMethod(groups = "slow")
     public void setUp() throws Exception {
-        internalCallContextFactory = new InternalCallContextFactory(getMysqlTestingHelper().getDBI(), new ClockMock());
+        internalCallContextFactory = new InternalCallContextFactory(getDBI(), new ClockMock());
     }
 
     @Test(groups = "slow")
@@ -43,7 +43,7 @@ public class TestInternalCallContextFactory extends UtilTestSuiteWithEmbeddedDB 
         final UUID invoiceId = UUID.randomUUID();
         final Long accountRecordId = 19384012L;
 
-        getMysqlTestingHelper().getDBI().withHandle(new HandleCallback<Void>() {
+        getDBI().withHandle(new HandleCallback<Void>() {
             @Override
             public Void withHandle(final Handle handle) throws Exception {
                 handle.execute("DROP TABLE IF EXISTS invoices;\n" +
@@ -60,7 +60,7 @@ public class TestInternalCallContextFactory extends UtilTestSuiteWithEmbeddedDB 
                                "    account_record_id int(11) unsigned default null,\n" +
                                "    tenant_record_id int(11) unsigned default null,\n" +
                                "    PRIMARY KEY(record_id)\n" +
-                               ") ENGINE=innodb;");
+                               ");");
                 handle.execute("insert into invoices (id, account_id, invoice_date, target_date, currency, migrated, created_by, created_date, account_record_id) values " +
                                "(?, ?, now(), now(), 'USD', 0, 'test', now(), ?)", invoiceId.toString(), UUID.randomUUID().toString(), accountRecordId);
                 return null;
@@ -78,7 +78,7 @@ public class TestInternalCallContextFactory extends UtilTestSuiteWithEmbeddedDB 
         final UUID accountId = UUID.randomUUID();
         final Long accountRecordId = 19384012L;
 
-        getMysqlTestingHelper().getDBI().withHandle(new HandleCallback<Void>() {
+        getDBTestingHelper().getDBI().withHandle(new HandleCallback<Void>() {
             @Override
             public Void withHandle(final Handle handle) throws Exception {
                 // Note: we always create an accounts table, see MysqlTestingHelper
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 ac498c4..e17bdd3 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
@@ -44,8 +44,8 @@ public class TestDefaultCustomFieldUserApi extends UtilTestSuiteWithEmbeddedDB {
 
     @BeforeMethod(groups = "slow")
     public void setUp() throws Exception {
-        final InternalCallContextFactory internalCallContextFactory = new InternalCallContextFactory(getMysqlTestingHelper().getDBI(), new ClockMock());
-        final CustomFieldDao customFieldDao = new DefaultCustomFieldDao(getMysqlTestingHelper().getDBI());
+        final InternalCallContextFactory internalCallContextFactory = new InternalCallContextFactory(getDBI(), new ClockMock());
+        final CustomFieldDao customFieldDao = new DefaultCustomFieldDao(getDBI());
         customFieldUserApi = new DefaultCustomFieldUserApi(internalCallContextFactory, customFieldDao);
     }
 
@@ -54,7 +54,7 @@ public class TestDefaultCustomFieldUserApi extends UtilTestSuiteWithEmbeddedDB {
         final UUID accountId = UUID.randomUUID();
         final Long accountRecordId = 19384012L;
 
-        getMysqlTestingHelper().getDBI().withHandle(new HandleCallback<Void>() {
+        getDBI().withHandle(new HandleCallback<Void>() {
             @Override
             public Void withHandle(final Handle handle) throws Exception {
                 // Note: we always create an accounts table, see MysqlTestingHelper
@@ -73,7 +73,7 @@ public class TestDefaultCustomFieldUserApi extends UtilTestSuiteWithEmbeddedDB {
         Assert.assertEquals(customFields.size(), 1);
         Assert.assertEquals(customFields.get(0), customField);
         // Verify the account_record_id was populated
-        getMysqlTestingHelper().getDBI().withHandle(new HandleCallback<Void>() {
+        getDBTestingHelper().getDBI().withHandle(new HandleCallback<Void>() {
             @Override
             public Void withHandle(final Handle handle) throws Exception {
                 final List<Map<String, Object>> values = handle.select("select account_record_id from custom_fields where object_id = ?", accountId.toString());
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 f401ca4..da7a8b7 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
@@ -25,9 +25,7 @@ import org.slf4j.LoggerFactory;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
 import com.ning.billing.ObjectType;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.api.CustomFieldApiException;
 import com.ning.billing.util.customfield.dao.CustomFieldDao;
@@ -39,13 +37,12 @@ import static org.testng.Assert.fail;
 public class TestFieldStore extends UtilTestSuiteWithEmbeddedDB {
 
     private final Logger log = LoggerFactory.getLogger(TestFieldStore.class);
-    private final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
     private CustomFieldDao customFieldDao;
 
     @BeforeClass(groups = "slow")
     protected void setup() throws IOException {
         try {
-            final IDBI dbi = helper.getDBI();
+            final IDBI dbi = getDBI();
             customFieldDao = new DefaultCustomFieldDao(dbi);
         } catch (Throwable t) {
             log.error("Setup failed", t);
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 ed26dd4..7f0b6a6 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
@@ -45,7 +45,7 @@ public class TestStringTemplateInheritanceWithJdbi extends KillbillTestSuiteWith
 
     @Test(groups = "slow")
     public void testInheritQueries() throws Exception {
-        final KombuchaSqlDao dao = getMysqlTestingHelper().getDBI().onDemand(KombuchaSqlDao.class);
+        final KombuchaSqlDao dao = getDBI().onDemand(KombuchaSqlDao.class);
 
         // Verify non inherited template
         Assert.assertEquals(dao.isIsTimeForKombucha(), clock.getUTCNow().getHourOfDay() == 17);
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 f5bdecb..f8b36a9 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
@@ -36,8 +36,8 @@ public class TestDatabaseExportDao extends UtilTestSuiteWithEmbeddedDB {
 
     @BeforeMethod(groups = "slow")
     public void setUp() throws Exception {
-        final DatabaseSchemaDao databaseSchemaDao = new DatabaseSchemaDao(getMysqlTestingHelper().getDBI());
-        dao = new DatabaseExportDao(databaseSchemaDao, getMysqlTestingHelper().getDBI());
+        final DatabaseSchemaDao databaseSchemaDao = new DatabaseSchemaDao(getDBI());
+        dao = new DatabaseExportDao(databaseSchemaDao, getDBI());
     }
 
     @Test(groups = "slow")
@@ -58,7 +58,7 @@ public class TestDatabaseExportDao extends UtilTestSuiteWithEmbeddedDB {
 
         final String tableNameA = "test_database_export_dao_a";
         final String tableNameB = "test_database_export_dao_b";
-        getMysqlTestingHelper().getDBI().withHandle(new HandleCallback<Void>() {
+        getDBTestingHelper().getDBI().withHandle(new HandleCallback<Void>() {
             @Override
             public Void withHandle(final Handle handle) throws Exception {
                 handle.execute("drop table if exists " + tableNameA);
@@ -66,13 +66,13 @@ public class TestDatabaseExportDao extends UtilTestSuiteWithEmbeddedDB {
                                "a_column char default 'a'," +
                                "account_record_id int(11) unsigned not null," +
                                "tenant_record_id int(11) unsigned default 0," +
-                               "primary key(record_id)) engine=innodb;");
+                               "primary key(record_id));");
                 handle.execute("drop table if exists " + tableNameB);
                 handle.execute("create table " + tableNameB + "(record_id int(11) unsigned not null auto_increment," +
                                "b_column char default 'b'," +
                                "account_record_id int(11) unsigned not null," +
                                "tenant_record_id int(11) unsigned default 0," +
-                               "primary key(record_id)) engine=innodb;");
+                               "primary key(record_id));");
                 handle.execute("insert into " + tableNameA + " (account_record_id, tenant_record_id) values (?, ?)",
                                internalCallContext.getAccountRecordId(), internalCallContext.getTenantRecordId());
                 handle.execute("insert into " + tableNameB + " (account_record_id, tenant_record_id) values (?, ?)",
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 99b218a..a006e58 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
@@ -28,8 +28,6 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
-import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.globallocker.GlobalLocker.LockerType;
 import com.ning.billing.util.io.IOUtils;
@@ -39,11 +37,9 @@ import com.google.inject.Inject;
 
 @Guice(modules = TestMysqlGlobalLocker.TestMysqlGlobalLockerModule.class)
 public class TestMysqlGlobalLocker extends UtilTestSuiteWithEmbeddedDB {
-    @Inject
-    private IDBI dbi;
 
     @Inject
-    private MysqlTestingHelper helper;
+    private IDBI dbi;
 
     @BeforeMethod(groups = "slow")
     public void setup() throws IOException {
@@ -83,11 +79,10 @@ public class TestMysqlGlobalLocker extends UtilTestSuiteWithEmbeddedDB {
     }
 
     public static final class TestMysqlGlobalLockerModule extends AbstractModule {
+
         @Override
         protected void configure() {
-            final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
-            bind(MysqlTestingHelper.class).toInstance(helper);
-            final IDBI dbi = helper.getDBI();
+            final IDBI dbi = getDBI();
             bind(IDBI.class).toInstance(dbi);
         }
     }
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 54be599..2634e62 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
@@ -30,8 +30,6 @@ import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
-import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.notificationq.DefaultNotification;
 import com.ning.billing.util.notificationq.Notification;
@@ -46,15 +44,13 @@ import static org.testng.Assert.assertNotNull;
 
 @Guice(modules = TestNotificationSqlDao.TestNotificationSqlDaoModule.class)
 public class TestNotificationSqlDao extends UtilTestSuiteWithEmbeddedDB {
+
     private static final UUID accountId = UUID.randomUUID();
     private static final String hostname = "Yop";
 
     @Inject
     private IDBI dbi;
 
-    @Inject
-    MysqlTestingHelper helper;
-
     private NotificationSqlDao dao;
 
     @BeforeSuite(groups = "slow")
@@ -150,23 +146,23 @@ public class TestNotificationSqlDao extends UtilTestSuiteWithEmbeddedDB {
             @Override
             public Notification withHandle(final Handle handle) throws Exception {
                 return handle.createQuery("   select" +
-                                                  " record_id " +
-                                                  ", id" +
-                                                  ", class_name" +
-                                                  ", account_id" +
-                                                  ", notification_key" +
-                                                  ", created_date" +
-                                                  ", creating_owner" +
-                                                  ", effective_date" +
-                                                  ", queue_name" +
-                                                  ", processing_owner" +
-                                                  ", processing_available_date" +
-                                                  ", processing_state" +
-                                                  ", account_record_id" +
-                                                  ", tenant_record_id" +
-                                                  "    from notifications " +
-                                                  " where " +
-                                                  " id = '" + notificationId + "';")
+                                          " record_id " +
+                                          ", id" +
+                                          ", class_name" +
+                                          ", account_id" +
+                                          ", notification_key" +
+                                          ", created_date" +
+                                          ", creating_owner" +
+                                          ", effective_date" +
+                                          ", queue_name" +
+                                          ", processing_owner" +
+                                          ", processing_available_date" +
+                                          ", processing_state" +
+                                          ", account_record_id" +
+                                          ", tenant_record_id" +
+                                          "    from notifications " +
+                                          " where " +
+                                          " id = '" + notificationId + "';")
                              .map(new NotificationSqlMapper())
                              .first();
             }
@@ -194,11 +190,10 @@ public class TestNotificationSqlDao extends UtilTestSuiteWithEmbeddedDB {
     }
 
     public static class TestNotificationSqlDaoModule extends AbstractModule {
+
         @Override
         protected void configure() {
-            final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
-            bind(MysqlTestingHelper.class).toInstance(helper);
-            final IDBI dbi = helper.getDBI();
+            final IDBI dbi = getDBI();
             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 fd7da4e..31834b2 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
@@ -26,8 +26,6 @@ import java.util.concurrent.TimeUnit;
 import org.joda.time.DateTime;
 import org.skife.jdbi.v2.Handle;
 import org.skife.jdbi.v2.IDBI;
-import org.skife.jdbi.v2.Transaction;
-import org.skife.jdbi.v2.TransactionStatus;
 import org.skife.jdbi.v2.tweak.HandleCallback;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -37,13 +35,11 @@ import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
-import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
-import com.ning.billing.util.config.NotificationConfig;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.clock.ClockMock;
+import com.ning.billing.util.config.NotificationConfig;
 import com.ning.billing.util.entity.dao.EntitySqlDao;
 import com.ning.billing.util.entity.dao.EntitySqlDaoTransactionWrapper;
 import com.ning.billing.util.entity.dao.EntitySqlDaoTransactionalJdbiWrapper;
@@ -66,8 +62,8 @@ import static org.testng.Assert.assertEquals;
 
 @Guice(modules = TestNotificationQueue.TestNotificationQueueModule.class)
 public class TestNotificationQueue extends UtilTestSuiteWithEmbeddedDB {
-    private final Logger log = LoggerFactory.getLogger(TestNotificationQueue.class);
 
+    private final Logger log = LoggerFactory.getLogger(TestNotificationQueue.class);
 
     private static final UUID accountId = UUID.randomUUID();
 
@@ -77,9 +73,6 @@ public class TestNotificationQueue extends UtilTestSuiteWithEmbeddedDB {
     private IDBI dbi;
 
     @Inject
-    MysqlTestingHelper helper;
-
-    @Inject
     private Clock clock;
 
     private DummySqlTest dao;
@@ -87,6 +80,7 @@ public class TestNotificationQueue extends UtilTestSuiteWithEmbeddedDB {
     private int eventsReceived;
 
     private static final class TestNotificationKey implements NotificationKey, Comparable<TestNotificationKey> {
+
         private final String value;
 
         @JsonCreator
@@ -237,7 +231,6 @@ public class TestNotificationQueue extends UtilTestSuiteWithEmbeddedDB {
                 }
             });
 
-
             // Move time in the future after the notification effectiveDate
             if (i == 0) {
                 ((ClockMock) clock).setDeltaFromReality(nextReadyTimeIncrementMs);
@@ -444,15 +437,14 @@ public class TestNotificationQueue extends UtilTestSuiteWithEmbeddedDB {
     }
 
     public static class TestNotificationQueueModule extends AbstractModule {
+
         @Override
         protected void configure() {
             bind(Clock.class).to(ClockMock.class);
 
-            final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
-            bind(MysqlTestingHelper.class).toInstance(helper);
-            final IDBI dbi = helper.getDBI();
+            final IDBI dbi = getDBI();
             bind(IDBI.class).toInstance(dbi);
-            final IDBI otherDbi = helper.getDBI();
+            final IDBI otherDbi = getDBI();
             bind(IDBI.class).annotatedWith(Names.named("global-lock")).toInstance(otherDbi);
         }
     }
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 c297633..8eba74d 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
@@ -29,7 +29,6 @@ import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
 import com.ning.billing.ObjectType;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.mock.glue.MockDbHelperModule;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.api.TagDefinitionApiException;
@@ -53,9 +52,6 @@ import static org.testng.Assert.assertEquals;
 public class TestDefaultTagDao extends UtilTestSuiteWithEmbeddedDB {
 
     @Inject
-    private MysqlTestingHelper helper;
-
-    @Inject
     private TagDefinitionDao tagDefinitionDao;
 
     @Inject
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 b53ff95..46fe94c 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
@@ -28,7 +28,6 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.mock.glue.MockDbHelperModule;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.bus.InMemoryBusModule;
@@ -46,9 +45,6 @@ import com.google.inject.Inject;
 public class TestDefaultTagDefinitionDao extends UtilTestSuiteWithEmbeddedDB {
 
     @Inject
-    private MysqlTestingHelper helper;
-
-    @Inject
     private TagDefinitionDao tagDefinitionDao;
 
     @Inject
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 13691d1..cd218de 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
@@ -30,7 +30,6 @@ import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
 import com.ning.billing.ObjectType;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.mock.glue.MockDbHelperModule;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.api.TagApiException;
@@ -58,9 +57,6 @@ import static org.testng.Assert.fail;
 public class TestTagStore extends UtilTestSuiteWithEmbeddedDB {
 
     @Inject
-    private MysqlTestingHelper helper;
-
-    @Inject
     private IDBI dbi;
 
     @Inject
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 a7690cd..c79b781 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
@@ -24,8 +24,6 @@ import org.skife.jdbi.v2.IDBI;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
-import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.globallocker.TestMysqlGlobalLocker;
 import com.ning.billing.util.io.IOUtils;
@@ -38,7 +36,6 @@ import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
 
 public class TestValidationManager extends UtilTestSuiteWithEmbeddedDB {
-    private final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
     private static final String TABLE_NAME = "validation_test";
 
     private ValidationManager vm;
diff --git a/util/src/test/resources/com/ning/billing/util/ddl_test.sql b/util/src/test/resources/com/ning/billing/util/ddl_test.sql
index e219d76..c4c8894 100644
--- a/util/src/test/resources/com/ning/billing/util/ddl_test.sql
+++ b/util/src/test/resources/com/ning/billing/util/ddl_test.sql
@@ -1,16 +1,18 @@
+/*! SET storage_engine=INNODB */;
+
 DROP TABLE IF EXISTS dummy;
 CREATE TABLE dummy (
     dummy_id char(36) NOT NULL,
     value varchar(256) NOT NULL,
     PRIMARY KEY(dummy_id)
-) ENGINE = innodb;
+);
 
 DROP TABLE IF EXISTS dummy2;
 CREATE TABLE dummy2 (
     id int(11) unsigned NOT NULL AUTO_INCREMENT,
     dummy_id char(36) NOT NULL,
     PRIMARY KEY(id)
-) ENGINE = innodb;
+);
 
 DROP TABLE IF EXISTS validation_test;
 CREATE TABLE validation_test (
@@ -18,7 +20,7 @@ CREATE TABLE validation_test (
     column2 char(2) NOT NULL,
     column3 numeric(10,4),
     column4 datetime
-) ENGINE = innodb;
+);
 
 DROP TABLE IF EXISTS kombucha;
 CREATE TABLE kombucha (
@@ -30,4 +32,4 @@ CREATE TABLE kombucha (
     account_record_id int(11) unsigned default null,
     tenant_record_id int(11) unsigned default null,
     PRIMARY KEY(record_id)
-) ENGINE = innodb;
+);