killbill-memoizeit
Changes
beatrix/pom.xml 25(+24 -1)
Details
beatrix/pom.xml 25(+24 -1)
diff --git a/beatrix/pom.xml b/beatrix/pom.xml
index c964ba4..8fe8863 100644
--- a/beatrix/pom.xml
+++ b/beatrix/pom.xml
@@ -8,7 +8,8 @@
OR CONDITIONS OF ANY KIND, either express or implied. See the ~ License for
the specific language governing permissions and limitations ~ under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ning.billing</groupId>
@@ -98,11 +99,33 @@
<type>test-jar</type>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>com.mysql</groupId>
+ <artifactId>management</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.mysql</groupId>
+ <artifactId>management-dbfiles</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ <scope>runtime</scope>
+ </dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <groups>fast,slow</groups>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/MockModule.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/MockModule.java
index 54f6dae..0cb1b01 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/MockModule.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/MockModule.java
@@ -36,6 +36,7 @@ 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.DbiConfig;
+import com.ning.billing.dbi.MysqlTestingHelper;
import com.ning.billing.entitlement.api.EntitlementService;
import com.ning.billing.entitlement.glue.EntitlementModule;
import com.ning.billing.invoice.api.InvoiceService;
@@ -66,9 +67,19 @@ public class MockModule extends AbstractModule {
bind(Clock.class).to(ClockMock.class).asEagerSingleton();
bind(ClockMock.class).asEagerSingleton();
bind(Lifecycle.class).to(SubsetDefaultLifecycle.class).asEagerSingleton();
- bind(IDBI.class).toProvider(DBIProvider.class).asEagerSingleton();
- final DbiConfig config = new ConfigurationObjectFactory(System.getProperties()).build(DbiConfig.class);
- bind(DbiConfig.class).toInstance(config);
+
+
+ final MysqlTestingHelper helper = new MysqlTestingHelper();
+ 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);
+ bind(DbiConfig.class).toInstance(config);
+ } else {
+ final IDBI dbi = helper.getDBI();
+ bind(IDBI.class).toInstance(dbi);
+ }
+
install(new GlobalLockerModule());
install(new BusModule());
install(new NotificationQueueModule());
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestBasic.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestBasic.java
index ecf16ae..e0eaa7e 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestBasic.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestBasic.java
@@ -19,11 +19,14 @@ package com.ning.billing.beatrix.integration;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
+import java.io.IOException;
import java.util.UUID;
import com.ning.billing.account.api.AccountApiException;
+import com.ning.billing.dbi.MysqlTestingHelper;
import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
+import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.RandomStringUtils;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
@@ -92,6 +95,9 @@ public class TestBasic {
@Inject
private AccountService accountService;
+ @Inject
+ private MysqlTestingHelper helper;
+
private EntitlementUserApi entitlementUserApi;
private InvoiceUserApi invoiceUserApi;
@@ -102,9 +108,30 @@ public class TestBasic {
+ private void setupMySQL() throws IOException
+ {
+
+
+ final String accountDdl = IOUtils.toString(TestBasic.class.getResourceAsStream("/com/ning/billing/account/ddl.sql"));
+ final String entitlementDdl = IOUtils.toString(TestBasic.class.getResourceAsStream("/com/ning/billing/entitlement/ddl.sql"));
+ final String invoiceDdl = IOUtils.toString(TestBasic.class.getResourceAsStream("/com/ning/billing/invoice/ddl.sql"));
+ final String paymentDdl = IOUtils.toString(TestBasic.class.getResourceAsStream("/com/ning/billing/payment/ddl.sql"));
+ final String utilDdl = IOUtils.toString(TestBasic.class.getResourceAsStream("/com/ning/billing/util/ddl.sql"));
+
+ helper.startMysql();
+
+ helper.initDb(accountDdl);
+ helper.initDb(entitlementDdl);
+ helper.initDb(invoiceDdl);
+ helper.initDb(paymentDdl);
+ helper.initDb(utilDdl);
+ }
+
@BeforeSuite(alwaysRun = true)
public void setup() throws Exception{
+ setupMySQL();
+
/**
* Initialize lifecyle for subset of services
*/
@@ -113,6 +140,8 @@ public class TestBasic {
busService.getBus().register(busHandler);
lifecycle.fireStartupSequencePostEventRegistration();
+
+
/**
* Retrieve APIs
*/
@@ -179,24 +208,24 @@ public class TestBasic {
return ctd;
}
- @Test(groups = "fast", enabled = false)
+ @Test(groups = "slow", enabled = true)
public void testBasePlanCompleteWithBillingDayInPast() throws Exception {
- testBasePlanComplete(clock.getUTCNow().minusDays(1).getDayOfMonth());
+ testBasePlanComplete(clock.getUTCNow().minusDays(1).getDayOfMonth(), false);
}
- @Test(groups = "fast", enabled = false)
+ @Test(groups = "slow", enabled = true)
public void testBasePlanCompleteWithBillingDayPresent() throws Exception {
- testBasePlanComplete(clock.getUTCNow().getDayOfMonth());
+ testBasePlanComplete(clock.getUTCNow().getDayOfMonth(), false);
}
- @Test(groups = "fast", enabled = false)
+ @Test(groups = "slow", enabled = true)
public void testBasePlanCompleteWithBillingDayAlignedWithTrial() throws Exception {
- testBasePlanComplete(clock.getUTCNow().plusDays(30).getDayOfMonth());
+ testBasePlanComplete(clock.getUTCNow().plusDays(30).getDayOfMonth(), false);
}
- @Test(groups = "fast", enabled = false)
+ @Test(groups = "slow", enabled = true)
public void testBasePlanCompleteWithBillingDayInFuture() throws Exception {
- testBasePlanComplete(clock.getUTCNow().plusDays(2).getDayOfMonth());
+ testBasePlanComplete(clock.getUTCNow().plusDays(2).getDayOfMonth(), true);
}
@@ -205,19 +234,28 @@ public class TestBasic {
}
- @Test(groups = "stress", enabled = false)
+ @Test(groups = "stress", enabled = true)
public void stressTest() throws Exception {
- final int maxIterations = 3;
+ final int maxIterations = 7;
int curIteration = maxIterations;
for (curIteration = 0; curIteration < maxIterations; curIteration++) {
log.info("################################ ITERATION " + curIteration + " #########################");
- setupTest();
Thread.sleep(1000);
+ setupTest();
testBasePlanCompleteWithBillingDayPresent();
+ Thread.sleep(1000);
+ setupTest();
+ testBasePlanCompleteWithBillingDayInPast();
+ Thread.sleep(1000);
+ setupTest();
+ testBasePlanCompleteWithBillingDayAlignedWithTrial();
+ Thread.sleep(1000);
+ setupTest();
+ testBasePlanCompleteWithBillingDayInFuture();
}
}
- private void testBasePlanComplete(int billingDay) throws Exception {
+ private void testBasePlanComplete(int billingDay, boolean prorationExpected) throws Exception {
long DELAY = 5000;
Account account = accountUserApi.createAccount(getAccountData(billingDay), null, null);
@@ -275,6 +313,12 @@ public class TestBasic {
busHandler.pushExpectedEvent(NextEvent.PHASE);
busHandler.pushExpectedEvent(NextEvent.INVOICE);
busHandler.pushExpectedEvent(NextEvent.PAYMENT);
+
+ if (prorationExpected) {
+ busHandler.pushExpectedEvent(NextEvent.INVOICE);
+ busHandler.pushExpectedEvent(NextEvent.PAYMENT);
+ }
+
clock.setDeltaFromReality(AT_LEAST_ONE_MONTH_MS);
assertTrue(busHandler.isCompleted(DELAY));
@@ -341,6 +385,10 @@ public class TestBasic {
assertNotNull(lastCtd);
log.info("Checking CTD: " + lastCtd.toString() + "; clock is " + clock.getUTCNow().toString());
assertTrue(lastCtd.isBefore(clock.getUTCNow()));
+
+ // The invoice system is still working to verify there is nothing to do
+ Thread.sleep(3000);
+ log.info("TEST PASSED !");
}
@Test(enabled=false)
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/lifecycle/TestLifecycle.java b/beatrix/src/test/java/com/ning/billing/beatrix/lifecycle/TestLifecycle.java
index 9bf7c10..f60d61f 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/lifecycle/TestLifecycle.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/lifecycle/TestLifecycle.java
@@ -121,7 +121,7 @@ public class TestLifecycle {
- @BeforeClass
+ @BeforeClass(alwaysRun=true)
public void setup() {
final Injector g = Guice.createInjector(Stage.DEVELOPMENT, new TestLifecycleModule());
s1 = g.getInstance(Service1.class);
diff --git a/invoice/src/main/java/com/ning/billing/invoice/notification/NextBillingDateEvent.java b/invoice/src/main/java/com/ning/billing/invoice/notification/NextBillingDateEvent.java
index 659d9e9..d4468c4 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/notification/NextBillingDateEvent.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/notification/NextBillingDateEvent.java
@@ -20,7 +20,7 @@ import java.util.UUID;
import com.ning.billing.util.bus.BusEvent;
-public class NextBillingDateEvent implements BusEvent{
+public class NextBillingDateEvent implements BusEvent {
private final UUID subscriptionId;
public NextBillingDateEvent(UUID subscriptionId) {
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 1e949a2..5ee7e88 100644
--- a/util/src/test/java/com/ning/billing/dbi/MysqlTestingHelper.java
+++ b/util/src/test/java/com/ning/billing/dbi/MysqlTestingHelper.java
@@ -39,6 +39,9 @@ import com.mysql.management.MysqldResourceI;
*/
public class MysqlTestingHelper
{
+
+ public static final String USE_LOCAL_DB_PROP = "com.ning.billing.dbi.test.useLocalDb";
+
private static final Logger log = LoggerFactory.getLogger(MysqlTestingHelper.class);
private static final String DB_NAME = "test_killbill";
@@ -47,24 +50,38 @@ public class MysqlTestingHelper
private File dbDir;
private MysqldResource mysqldResource;
- private int port = 0;
+ private int port;
public MysqlTestingHelper()
{
- // New socket on any free port
- final ServerSocket socket;
- try {
- socket = new ServerSocket(0);
- port = socket.getLocalPort();
- socket.close();
- }
- catch (IOException e) {
- Assert.fail();
+ if (isUsingLocalInstance()) {
+ port = 3306;
+ } else {
+ // New socket on any free port
+ final ServerSocket socket;
+ try {
+ socket = new ServerSocket(0);
+ port = socket.getLocalPort();
+ socket.close();
+ }
+ catch (IOException e) {
+ Assert.fail();
+ }
}
}
+
+ public boolean isUsingLocalInstance() {
+ return (System.getProperty(USE_LOCAL_DB_PROP) != null);
+ }
+
public void startMysql() throws IOException
{
+
+ if (isUsingLocalInstance()) {
+ return;
+ }
+
dbDir = File.createTempFile("mysql", "");
dbDir.delete();
dbDir.mkdir();
@@ -87,6 +104,12 @@ public class MysqlTestingHelper
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;
+ }
+
if (mysqldResource == null || !mysqldResource.isRunning()) {
log.error("Asked to cleanup table " + table + " but MySQL is not running!");
return;
@@ -122,6 +145,9 @@ public class MysqlTestingHelper
public void initDb(final String ddl) throws IOException
{
+ if (isUsingLocalInstance()) {
+ return;
+ }
final IDBI dbi = getDBI();
dbi.withHandle(new HandleCallback<Void>()
{