Details
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 71c35ac..cf56fed 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestModule.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestModule.java
@@ -59,7 +59,7 @@ public class AnalyticsTestModule extends AnalyticsModule {
install(new DefaultJunctionModule());
// Install the Dao layer
- final MysqlTestingHelper helper = new MysqlTestingHelper();
+ final MysqlTestingHelper helper = TestWithEmbeddedDB.getMysqlTestingHelper();
bind(MysqlTestingHelper.class).toInstance(helper);
final IDBI dbi = helper.getDBI();
bind(IDBI.class).toInstance(dbi);
diff --git a/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestSuite.java b/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestSuite.java
new file mode 100644
index 0000000..489f5a1
--- /dev/null
+++ b/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestSuite.java
@@ -0,0 +1,42 @@
+/*
+ * 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.analytics;
+
+import java.lang.reflect.Method;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+
+public abstract class AnalyticsTestSuite {
+ private static final Logger log = LoggerFactory.getLogger(AnalyticsTestSuite.class);
+
+ @BeforeMethod(alwaysRun = true)
+ public void startTest(final Method method) throws Exception {
+ log.info("***************************************************************************************************");
+ log.info("*** Starting test {}:{}", method.getDeclaringClass().getName(), method.getName());
+ log.info("***************************************************************************************************");
+ }
+
+ @AfterMethod(alwaysRun = true)
+ public void endTest(final Method method) throws Exception {
+ log.info("***************************************************************************************************");
+ log.info("*** Ending test {}:{}", method.getDeclaringClass().getName(), method.getName());
+ log.info("***************************************************************************************************");
+ }
+}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java b/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
index 6037013..06954e1 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
@@ -24,11 +24,10 @@ import java.util.Arrays;
import java.util.List;
import java.util.UUID;
-import org.apache.commons.io.IOUtils;
import org.joda.time.DateTime;
import org.testng.Assert;
-import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
@@ -46,6 +45,7 @@ import com.ning.billing.analytics.MockDuration;
import com.ning.billing.analytics.MockPhase;
import com.ning.billing.analytics.MockPlan;
import com.ning.billing.analytics.MockProduct;
+import com.ning.billing.analytics.TestWithEmbeddedDB;
import com.ning.billing.analytics.dao.BusinessAccountDao;
import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionDao;
import com.ning.billing.catalog.MockCatalogModule;
@@ -59,7 +59,6 @@ import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.catalog.api.PriceList;
import com.ning.billing.catalog.api.Product;
import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.dbi.MysqlTestingHelper;
import com.ning.billing.entitlement.api.user.DefaultSubscriptionEvent;
import com.ning.billing.entitlement.api.user.EntitlementUserApi;
import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
@@ -98,13 +97,11 @@ import com.ning.billing.util.tag.dao.TagDefinitionSqlDao;
import static org.testng.Assert.fail;
@Guice(modules = {AnalyticsTestModule.class, MockCatalogModule.class})
-public class TestAnalyticsService {
-
+public class TestAnalyticsService extends TestWithEmbeddedDB {
final Product product = new MockProduct("platinum", "subscription", ProductCategory.BASE);
final Plan plan = new MockPlan("platinum-monthly", product);
final PlanPhase phase = new MockPhase(PhaseType.EVERGREEN, plan, MockDuration.UNLIMITED(), 25.95);
-
private static final UUID ID = UUID.randomUUID();
private static final String KEY = "12345";
private static final String ACCOUNT_KEY = "pierre-12345";
@@ -145,9 +142,6 @@ public class TestAnalyticsService {
@Inject
private BusinessAccountDao accountDao;
- @Inject
- private MysqlTestingHelper helper;
-
private SubscriptionEvent transition;
private BusinessSubscriptionTransition expectedTransition;
@@ -161,17 +155,17 @@ public class TestAnalyticsService {
private Catalog catalog;
@BeforeClass(groups = "slow")
- public void startMysql() throws IOException, ClassNotFoundException, SQLException, EntitlementUserApiException {
-
+ public void setUp() throws IOException, ClassNotFoundException, SQLException, EntitlementUserApiException {
catalog = catalogService.getFullCatalog();
((ZombieControl) catalog).addResult("findPlan", plan);
((ZombieControl) catalog).addResult("findPhase", phase);
// Killbill generic setup
- setupBusAndMySQL();
-
- helper.cleanupAllTables();
+ bus.start();
+ }
+ @BeforeMethod(groups = "slow")
+ public void createMocks() {
tagDao.create(TAG_ONE, context);
tagDao.create(TAG_TWO, context);
@@ -192,30 +186,6 @@ public class TestAnalyticsService {
}
}
- private void setupBusAndMySQL() throws IOException {
-
- final String analyticsDdl = IOUtils.toString(BusinessSubscriptionTransitionDao.class.getResourceAsStream("/com/ning/billing/analytics/ddl.sql"));
- final String accountDdl = IOUtils.toString(BusinessSubscriptionTransitionDao.class.getResourceAsStream("/com/ning/billing/account/ddl.sql"));
- final String entitlementDdl = IOUtils.toString(BusinessSubscriptionTransitionDao.class.getResourceAsStream("/com/ning/billing/entitlement/ddl.sql"));
- final String invoiceDdl = IOUtils.toString(BusinessSubscriptionTransitionDao.class.getResourceAsStream("/com/ning/billing/invoice/ddl.sql"));
- final String paymentDdl = IOUtils.toString(BusinessSubscriptionTransitionDao.class.getResourceAsStream("/com/ning/billing/payment/ddl.sql"));
- final String utilDdl = IOUtils.toString(BusinessSubscriptionTransitionDao.class.getResourceAsStream("/com/ning/billing/util/ddl.sql"));
- final String junctionDdl = IOUtils.toString(BusinessSubscriptionTransitionDao.class.getResourceAsStream("/com/ning/billing/junction/ddl.sql"));
-
- helper.startMysql();
- helper.initDb(analyticsDdl);
- helper.initDb(accountDdl);
- helper.initDb(entitlementDdl);
- helper.initDb(invoiceDdl);
- helper.initDb(paymentDdl);
- helper.initDb(utilDdl);
- helper.initDb(junctionDdl);
-
- helper.cleanupAllTables();
-
- bus.start();
- }
-
private void createSubscriptionTransitionEvent(final Account account) throws EntitlementUserApiException {
final SubscriptionBundle bundle = entitlementApi.createBundleForAccount(account.getId(), KEY, context);
@@ -289,12 +259,7 @@ public class TestAnalyticsService {
Assert.assertEquals(paymentDao.getPaymentInfoList(Arrays.asList(invoice.getId())).size(), 1);
}
- @AfterClass(groups = "slow")
- public void stopMysql() {
- helper.stopMysql();
- }
-
- @Test(groups = "slow", enabled = true)
+ @Test(groups = "slow")
public void testRegisterForNotifications() throws Exception {
// Make sure the service has been instantiated
Assert.assertEquals(service.getName(), "analytics-service");
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java
index 31b9097..de9831f 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java
@@ -41,6 +41,7 @@ import com.ning.billing.analytics.MockDuration;
import com.ning.billing.analytics.MockPhase;
import com.ning.billing.analytics.MockPlan;
import com.ning.billing.analytics.MockProduct;
+import com.ning.billing.analytics.TestWithEmbeddedDB;
import com.ning.billing.analytics.utils.Rounder;
import com.ning.billing.catalog.api.Catalog;
import com.ning.billing.catalog.api.CatalogService;
@@ -50,18 +51,16 @@ import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.catalog.api.Product;
import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.dbi.MysqlTestingHelper;
import com.ning.billing.entitlement.api.user.Subscription;
import com.ning.billing.mock.BrainDeadProxyFactory;
import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
import com.ning.billing.util.tag.Tag;
-public class TestAnalyticsDao {
+public class TestAnalyticsDao extends TestWithEmbeddedDB {
private static final UUID EVENT_ID = UUID.randomUUID();
private static final String EVENT_KEY = "23456";
private static final String ACCOUNT_KEY = "pierre-143343-vcc";
- private final MysqlTestingHelper helper = new MysqlTestingHelper();
private final Product product = new MockProduct("platinium", "subscription", ProductCategory.BASE);
private final Plan plan = new MockPlan("platinum-monthly", product);
private final PlanPhase phase = new MockPhase(PhaseType.EVERGREEN, plan, MockDuration.UNLIMITED(), 25.95);
@@ -75,17 +74,11 @@ public class TestAnalyticsDao {
private final Catalog catalog = BrainDeadProxyFactory.createBrainDeadProxyFor(Catalog.class);
@BeforeClass(alwaysRun = true)
- public void startMysql() throws IOException, ClassNotFoundException, SQLException {
-
+ public void setup() throws IOException, ClassNotFoundException, SQLException {
((ZombieControl) catalog).addResult("findPlan", plan);
((ZombieControl) catalog).addResult("findPhase", phase);
((ZombieControl) catalogService).addResult("getFullCatalog", catalog);
- final String ddl = IOUtils.toString(BusinessSubscriptionTransitionDao.class.getResourceAsStream("/com/ning/billing/analytics/ddl.sql"));
-
- helper.startMysql();
- helper.initDb(ddl);
-
setupBusinessSubscriptionTransition();
setupBusinessAccount();
}
@@ -96,7 +89,6 @@ public class TestAnalyticsDao {
final BusinessSubscription nextSubscription = new BusinessSubscription(null, plan.getName(), phase.getName(), Currency.USD, new DateTime(DateTimeZone.UTC), Subscription.SubscriptionState.CANCELLED, UUID.randomUUID(), UUID.randomUUID(), catalog);
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCancelled(plan.getName(), catalog, requestedTimestamp, requestedTimestamp);
-
transition = new BusinessSubscriptionTransition(EVENT_ID, EVENT_KEY, ACCOUNT_KEY, requestedTimestamp, event, prevSubscription, nextSubscription);
final IDBI dbi = helper.getDBI();
@@ -135,17 +127,6 @@ public class TestAnalyticsDao {
return tag;
}
- @AfterClass(groups = "slow")
- public void stopMysql() {
- helper.stopMysql();
- }
-
- @BeforeMethod(groups = "slow")
- public void cleanup() throws Exception {
- helper.cleanupTable("bst");
- helper.cleanupTable("bac");
- }
-
@Test(groups = "slow")
public void testHandleDuplicatedEvents() {
final BusinessSubscriptionTransition transitionWithNullPrev = new BusinessSubscriptionTransition(
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java b/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
index e928caf..f3baf8e 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
@@ -43,7 +43,7 @@ import com.ning.billing.entitlement.events.user.ApiEventType;
import com.ning.billing.mock.BrainDeadProxyFactory;
import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
-public class TestAnalyticsListener {
+public class TestAnalyticsListener extends AnalyticsTestSuite {
private static final String KEY = "1234";
private static final String ACCOUNT_KEY = "pierre-1234";
private final Currency CURRENCY = Currency.BRL;
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessAccount.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessAccount.java
index 3588d5e..51e5b50 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessAccount.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessAccount.java
@@ -27,7 +27,7 @@ import org.testng.annotations.Test;
import com.ning.billing.mock.BrainDeadProxyFactory;
import com.ning.billing.util.tag.Tag;
-public class TestBusinessAccount {
+public class TestBusinessAccount extends AnalyticsTestSuite {
private BusinessAccount account;
@BeforeMethod(alwaysRun = true)
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java
index dff0c53..f9f7df1 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java
@@ -36,7 +36,7 @@ import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
import static com.ning.billing.catalog.api.Currency.USD;
-public class TestBusinessSubscription {
+public class TestBusinessSubscription extends AnalyticsTestSuite {
private final Duration MONTHLY = MockDuration.MONHTLY();
private final Duration YEARLY = MockDuration.YEARLY();
final Object[][] catalogMapping = {
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionEvent.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionEvent.java
index 79d01d9..f7433e5 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionEvent.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionEvent.java
@@ -32,7 +32,7 @@ import com.ning.billing.entitlement.api.user.Subscription;
import com.ning.billing.mock.BrainDeadProxyFactory;
import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
-public class TestBusinessSubscriptionEvent {
+public class TestBusinessSubscriptionEvent extends AnalyticsTestSuite {
private Product product;
private Plan plan;
private PlanPhase phase;
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransition.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransition.java
index c72692e..8bc9caf 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransition.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransition.java
@@ -37,7 +37,7 @@ import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
import static com.ning.billing.catalog.api.Currency.USD;
-public class TestBusinessSubscriptionTransition {
+public class TestBusinessSubscriptionTransition extends AnalyticsTestSuite {
private BusinessSubscription prevSubscription;
private BusinessSubscription nextSubscription;
private BusinessSubscriptionEvent event;
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestWithEmbeddedDB.java b/analytics/src/test/java/com/ning/billing/analytics/TestWithEmbeddedDB.java
new file mode 100644
index 0000000..ad99469
--- /dev/null
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestWithEmbeddedDB.java
@@ -0,0 +1,66 @@
+/*
+ * 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.analytics;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.sql.SQLException;
+
+import org.apache.commons.io.IOUtils;
+import org.testng.annotations.AfterSuite;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.BeforeSuite;
+
+import com.google.common.io.Resources;
+import com.ning.billing.dbi.MysqlTestingHelper;
+
+public abstract class TestWithEmbeddedDB extends AnalyticsTestSuite {
+ protected static final MysqlTestingHelper helper = new MysqlTestingHelper();
+
+ public static MysqlTestingHelper getMysqlTestingHelper() {
+ return helper;
+ }
+
+ @BeforeSuite(groups = "slow")
+ public void startMysql() throws IOException, ClassNotFoundException, SQLException, URISyntaxException {
+ helper.startMysql();
+
+ for (final String pack : new String[]{"account", "analytics", "entitlement", "util", "payment", "invoice", "junction"}) {
+ final String ddl = IOUtils.toString(Resources.getResource("com/ning/billing/" + pack + "/ddl.sql").openStream());
+ helper.initDb(ddl);
+ }
+
+ helper.cleanupAllTables();
+ }
+
+ @BeforeMethod(alwaysRun = true)
+ public void cleanup() {
+ try {
+ helper.cleanupAllTables();
+ } catch (Exception ignored) {
+ }
+ }
+
+ @AfterSuite(groups = "slow")
+ public void shutdownMysql() throws IOException, ClassNotFoundException, SQLException, URISyntaxException {
+ try {
+ helper.cleanupAllTables();
+ helper.stopMysql();
+ } catch (Exception ignored) {
+ }
+ }
+}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/utils/TestRounder.java b/analytics/src/test/java/com/ning/billing/analytics/utils/TestRounder.java
index 5b15474..e685641 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/utils/TestRounder.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/utils/TestRounder.java
@@ -21,7 +21,9 @@ import java.math.BigDecimal;
import org.testng.Assert;
import org.testng.annotations.Test;
-public class TestRounder {
+import com.ning.billing.analytics.AnalyticsTestSuite;
+
+public class TestRounder extends AnalyticsTestSuite {
@Test(groups = "fast")
public void testRound() throws Exception {
Assert.assertEquals(Rounder.round(null), 0.0);