killbill-memoizeit
Changes
.gitignore 6(+3 -3)
account/pom.xml 12(+11 -1)
api/pom.xml 2(+1 -1)
beatrix/pom.xml 12(+11 -1)
beatrix/src/test/java/org/killbill/billing/beatrix/integration/BeatrixIntegrationModule.java 40(+11 -29)
beatrix/src/test/java/org/killbill/billing/beatrix/integration/osgi/TestBasicOSGIWithTestBundle.java 25(+6 -19)
bin/start-server 14(+1 -13)
catalog/pom.xml 12(+11 -1)
currency/pom.xml 2(+1 -1)
entitlement/pom.xml 12(+11 -1)
entitlement/src/test/java/org/killbill/billing/entitlement/EntitlementTestSuiteWithEmbeddedDB.java 33(+14 -19)
invoice/pom.xml 12(+11 -1)
invoice/src/test/java/org/killbill/billing/invoice/template/formatters/TestDefaultInvoiceFormatter.java 197(+97 -100)
invoice/src/test/java/org/killbill/billing/invoice/template/formatters/TestDefaultInvoiceItemFormatter.java 12(+5 -7)
jaxrs/pom.xml 13(+11 -2)
junction/pom.xml 12(+11 -1)
junction/src/test/java/org/killbill/billing/junction/JunctionTestSuiteWithEmbeddedDB.java 31(+14 -17)
NEWS 5(+5 -0)
osgi/pom.xml 12(+11 -1)
osgi-bundles/bundles/jruby/pom.xml 2(+1 -1)
osgi-bundles/bundles/logger/pom.xml 2(+1 -1)
osgi-bundles/bundles/pom.xml 2(+1 -1)
osgi-bundles/defaultbundles/pom.xml 2(+1 -1)
osgi-bundles/libs/killbill/pom.xml 2(+1 -1)
osgi-bundles/libs/pom.xml 2(+1 -1)
osgi-bundles/libs/slf4j-osgi/pom.xml 2(+1 -1)
osgi-bundles/pom.xml 2(+1 -1)
osgi-bundles/tests/beatrix/pom.xml 2(+1 -1)
osgi-bundles/tests/payment/pom.xml 2(+1 -1)
osgi-bundles/tests/pom.xml 2(+1 -1)
overdue/pom.xml 12(+11 -1)
payment/pom.xml 12(+11 -1)
pom.xml 2(+1 -1)
server/pom.xml 2(+1 -1)
subscription/pom.xml 12(+11 -1)
subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteNoDB.java 37(+17 -20)
subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteWithEmbeddedDB.java 29(+13 -16)
tenant/pom.xml 12(+11 -1)
usage/pom.xml 12(+11 -1)
util/pom.xml 2(+1 -1)
Details
.gitignore 6(+3 -3)
diff --git a/.gitignore b/.gitignore
index c26b0f3..f7f01e8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,6 +25,6 @@ catalog/src/test/resources/CatalogSchema.xsd
server/load
dependency-reduced-pom.xml
dependency-reduced-pom.xml.bak
-server/killbill.h2.db
-server/killbill.lock.db
-server/killbill.trace.db
+killbill.h2.db
+killbill.lock.db
+killbill.trace.db
account/pom.xml 12(+11 -1)
diff --git a/account/pom.xml b/account/pom.xml
index 9b34bea..31e5cbe 100644
--- a/account/pom.xml
+++ b/account/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-account</artifactId>
@@ -96,6 +96,16 @@
</dependency>
<dependency>
<groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-mysql</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
<artifactId>killbill-queue</artifactId>
</dependency>
<dependency>
diff --git a/account/src/test/java/org/killbill/billing/account/dao/TestAccountDao.java b/account/src/test/java/org/killbill/billing/account/dao/TestAccountDao.java
index 12a6687..d7ddc80 100644
--- a/account/src/test/java/org/killbill/billing/account/dao/TestAccountDao.java
+++ b/account/src/test/java/org/killbill/billing/account/dao/TestAccountDao.java
@@ -21,9 +21,6 @@ import java.util.List;
import java.util.UUID;
import org.joda.time.DateTimeZone;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
import org.killbill.billing.ErrorCode;
import org.killbill.billing.ObjectType;
import org.killbill.billing.account.AccountTestSuiteWithEmbeddedDB;
@@ -52,6 +49,8 @@ import org.killbill.billing.util.tag.DescriptiveTag;
import org.killbill.billing.util.tag.Tag;
import org.killbill.billing.util.tag.dao.TagDefinitionModelDao;
import org.killbill.billing.util.tag.dao.TagModelDao;
+import org.testng.Assert;
+import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
api/pom.xml 2(+1 -1)
diff --git a/api/pom.xml b/api/pom.xml
index cec465b..4258082 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-internal-api</artifactId>
beatrix/pom.xml 12(+11 -1)
diff --git a/beatrix/pom.xml b/beatrix/pom.xml
index d5be25b..2eaacdd 100644
--- a/beatrix/pom.xml
+++ b/beatrix/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-beatrix</artifactId>
@@ -188,6 +188,16 @@
</dependency>
<dependency>
<groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-mysql</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
<artifactId>killbill-queue</artifactId>
</dependency>
<dependency>
diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/BeatrixTestSuiteWithEmbeddedDB.java b/beatrix/src/test/java/org/killbill/billing/beatrix/BeatrixTestSuiteWithEmbeddedDB.java
index 10eda00..9f490cb 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/BeatrixTestSuiteWithEmbeddedDB.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/BeatrixTestSuiteWithEmbeddedDB.java
@@ -16,7 +16,17 @@
package org.killbill.billing.beatrix;
+import java.io.IOException;
+import java.net.URISyntaxException;
+
import org.killbill.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
+import org.killbill.billing.TestKillbillConfigSource;
+import org.killbill.billing.util.KillbillConfigSource;
public abstract class BeatrixTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteWithEmbeddedDB {
+
+ @Override
+ protected KillbillConfigSource getConfigSource() throws IOException, URISyntaxException {
+ return new TestKillbillConfigSource("/beatrix.properties");
+ }
}
diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/BeatrixIntegrationModule.java b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/BeatrixIntegrationModule.java
index 207db47..71571d8 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/BeatrixIntegrationModule.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/BeatrixIntegrationModule.java
@@ -16,8 +16,6 @@
package org.killbill.billing.beatrix.integration;
-import java.io.IOException;
-import java.net.URL;
import java.util.Set;
import org.killbill.billing.DBTestingHelper;
@@ -80,8 +78,6 @@ import com.google.inject.AbstractModule;
import com.google.inject.Inject;
import com.google.inject.Injector;
-import static org.testng.Assert.assertNotNull;
-
public class BeatrixIntegrationModule extends AbstractModule {
public static final String NON_OSGI_PLUGIN_NAME = "yoyo";
@@ -97,8 +93,6 @@ public class BeatrixIntegrationModule extends AbstractModule {
@Override
protected void configure() {
- loadSystemPropertiesFromClasspath("/beatrix.properties");
-
install(new GuicyKillbillTestWithEmbeddedDBModule());
install(new GlobalLockerModule(DBTestingHelper.get().getDBEngine()));
install(new CacheModule(configSource));
@@ -161,16 +155,6 @@ public class BeatrixIntegrationModule extends AbstractModule {
}
}
- private static void loadSystemPropertiesFromClasspath(final String resource) {
- final URL url = TestIntegration.class.getResource(resource);
- assertNotNull(url);
- try {
- System.getProperties().load(url.openStream());
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
private static final class SubsetDefaultLifecycle extends DefaultLifecycle {
@Inject
@@ -180,19 +164,17 @@ public class BeatrixIntegrationModule extends AbstractModule {
@Override
protected Set<? extends KillbillService> findServices() {
- final ImmutableSet<? extends KillbillService> services = new ImmutableSet.Builder<KillbillService>()
- .add(injector.getInstance(AccountService.class))
- .add(injector.getInstance(BusService.class))
- .add(injector.getInstance(CatalogService.class))
- .add(injector.getInstance(SubscriptionBaseService.class))
- .add(injector.getInstance(EntitlementService.class))
- .add(injector.getInstance(InvoiceService.class))
- .add(injector.getInstance(PaymentService.class))
- .add(injector.getInstance(OverdueService.class))
- .add(injector.getInstance(DefaultBeatrixService.class))
- .add(injector.getInstance(DefaultOSGIService.class))
- .build();
- return services;
+ return new ImmutableSet.Builder<KillbillService>().add(injector.getInstance(AccountService.class))
+ .add(injector.getInstance(BusService.class))
+ .add(injector.getInstance(CatalogService.class))
+ .add(injector.getInstance(SubscriptionBaseService.class))
+ .add(injector.getInstance(EntitlementService.class))
+ .add(injector.getInstance(InvoiceService.class))
+ .add(injector.getInstance(PaymentService.class))
+ .add(injector.getInstance(OverdueService.class))
+ .add(injector.getInstance(DefaultBeatrixService.class))
+ .add(injector.getInstance(DefaultOSGIService.class))
+ .build();
}
}
diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/osgi/TestBasicOSGIWithTestBundle.java b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/osgi/TestBasicOSGIWithTestBundle.java
index e3d24ff..4ff1bce 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/osgi/TestBasicOSGIWithTestBundle.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/osgi/TestBasicOSGIWithTestBundle.java
@@ -26,6 +26,12 @@ import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
+import org.killbill.billing.account.api.Account;
+import org.killbill.billing.beatrix.osgi.SetupBundleWithAssertion;
+import org.killbill.billing.catalog.api.Currency;
+import org.killbill.billing.osgi.api.OSGIServiceRegistration;
+import org.killbill.billing.payment.plugin.api.PaymentInfoPlugin;
+import org.killbill.billing.payment.plugin.api.PaymentPluginApi;
import org.skife.jdbi.v2.Handle;
import org.skife.jdbi.v2.IDBI;
import org.skife.jdbi.v2.Query;
@@ -37,15 +43,6 @@ import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
-import org.killbill.billing.DBTestingHelper;
-import org.killbill.billing.account.api.Account;
-import org.killbill.billing.beatrix.osgi.SetupBundleWithAssertion;
-import org.killbill.billing.catalog.api.Currency;
-import org.killbill.billing.osgi.api.OSGIServiceRegistration;
-import org.killbill.billing.osgi.glue.OSGIDataSourceConfig;
-import org.killbill.billing.payment.plugin.api.PaymentInfoPlugin;
-import org.killbill.billing.payment.plugin.api.PaymentPluginApi;
-
import static com.jayway.awaitility.Awaitility.await;
/**
@@ -67,15 +64,6 @@ public class TestBasicOSGIWithTestBundle extends TestOSGIBase {
@BeforeClass(groups = "slow")
public void beforeClass() throws Exception {
- // Can't use the injected helper as Guice hasn't injected anything yet
- final String jdbcConnection = DBTestingHelper.get().getJdbcConnectionString();
- final String userName = DBTestingHelper.get().getUsername();
- final String userPwd = DBTestingHelper.get().getPassword();
-
- System.setProperty(OSGIDataSourceConfig.DATA_SOURCE_PROP_PREFIX + "jdbc.url", jdbcConnection);
- System.setProperty(OSGIDataSourceConfig.DATA_SOURCE_PROP_PREFIX + "jdbc.user", userName);
- System.setProperty(OSGIDataSourceConfig.DATA_SOURCE_PROP_PREFIX + "jdbc.password", userPwd);
-
// OSGIDataSourceConfig
super.beforeClass();
@@ -83,7 +71,6 @@ public class TestBasicOSGIWithTestBundle extends TestOSGIBase {
final String killbillVersion = System.getProperty("killbill.version");
SetupBundleWithAssertion setupTest = new SetupBundleWithAssertion(BUNDLE_TEST_RESOURCE, osgiConfig, killbillVersion);
setupTest.setupJavaBundle();
-
}
@Test(groups = "slow")
diff --git a/beatrix/src/test/resources/beatrix.properties b/beatrix/src/test/resources/beatrix.properties
index ffcc302..90f9f65 100644
--- a/beatrix/src/test/resources/beatrix.properties
+++ b/beatrix/src/test/resources/beatrix.properties
@@ -1,28 +1,3 @@
org.killbill.catalog.uri=file:src/test/resources/catalogTest.xml
-
-org.killbill.notificationq.main.sleep=100
-org.killbill.notificationq.main.nbThreads=1
-org.killbill.notificationq.main.useInFlightQ=false
-org.killbill.notificationq.main.prefetch=1
-org.killbill.notificationq.main.claimed=1
-
-org.killbill.persistent.bus.main.sleep=100
-org.killbill.persistent.bus.main.nbThreads=1
-org.killbill.persistent.bus.main.prefetch=1
-org.killbill.persistent.bus.main.claimed=1
-org.killbill.persistent.bus.main.useInFlightQ=false
-
-org.killbill.persistent.bus.external.sleep=100
-org.killbill.persistent.bus.external.nbThreads=1
-org.killbill.persistent.bus.external.prefetch=1
-org.killbill.persistent.bus.external.claimed=1
-org.killbill.persistent.bus.external.useInFlightQ=false
-
-org.killbill.persistent.bus.external.tableName=bus_ext_events
-org.killbill.persistent.bus.external.historyTableName=bus_ext_events_history
-
-user.timezone=UTC
org.killbill.payment.retry.days=8,8,8,8,8,8,8,8
org.killbill.osgi.bundle.install.dir=/var/tmp/beatrix-bundles
-org.slf4j.simpleLogger.showDateTime=true
-
bin/start-server 14(+1 -13)
diff --git a/bin/start-server b/bin/start-server
index 77711fd..438560f 100755
--- a/bin/start-server
+++ b/bin/start-server
@@ -51,22 +51,10 @@ function usage() {
exit 1
}
-function build_properties() {
- local opts=
- local prop=
- for prop in `cat $PROPERTIES | grep =`; do
- local k=`echo $prop | awk 'BEGIN {FS="="} { print $1 }'`
- local v=`echo $prop | awk 'BEGIN {FS="="} {for (i=2; i<NF; i++) printf $i "="; print $NF}'`
- opts="$opts -D$k=$v"
- done
- echo $opts
-}
-
function start() {
mkdir -p $LOG_DIR
- local opts=`build_properties`
- local start_cmd="mvn $opts -Dlogback.configurationFile=$LOG jetty:run"
+ local start_cmd="mvn -Dorg.killbill.server.properties=file://$PROPERTIES -Dlogback.configurationFile=$LOG jetty:run"
local debug_opts_eclipse=
if [ ! -z $DEBUG ]; then
catalog/pom.xml 12(+11 -1)
diff --git a/catalog/pom.xml b/catalog/pom.xml
index 1d2f04e..9d94dc3 100644
--- a/catalog/pom.xml
+++ b/catalog/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-catalog</artifactId>
@@ -73,6 +73,16 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-mysql</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<scope>test</scope>
currency/pom.xml 2(+1 -1)
diff --git a/currency/pom.xml b/currency/pom.xml
index a943b91..6b1e267 100644
--- a/currency/pom.xml
+++ b/currency/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
entitlement/pom.xml 12(+11 -1)
diff --git a/entitlement/pom.xml b/entitlement/pom.xml
index 576930b..429070b 100644
--- a/entitlement/pom.xml
+++ b/entitlement/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-entitlement</artifactId>
@@ -117,6 +117,16 @@
</dependency>
<dependency>
<groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-mysql</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
<artifactId>killbill-queue</artifactId>
</dependency>
<dependency>
diff --git a/entitlement/src/test/java/org/killbill/billing/entitlement/EntitlementTestSuiteWithEmbeddedDB.java b/entitlement/src/test/java/org/killbill/billing/entitlement/EntitlementTestSuiteWithEmbeddedDB.java
index ee3f4e8..333d540 100644
--- a/entitlement/src/test/java/org/killbill/billing/entitlement/EntitlementTestSuiteWithEmbeddedDB.java
+++ b/entitlement/src/test/java/org/killbill/billing/entitlement/EntitlementTestSuiteWithEmbeddedDB.java
@@ -16,29 +16,22 @@
package org.killbill.billing.entitlement;
-import java.net.URL;
+import java.io.IOException;
+import java.net.URISyntaxException;
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.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-
import org.killbill.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
+import org.killbill.billing.TestKillbillConfigSource;
import org.killbill.billing.account.api.AccountData;
import org.killbill.billing.account.api.AccountInternalApi;
import org.killbill.billing.account.api.AccountUserApi;
import org.killbill.billing.api.TestApiListener;
-import org.killbill.bus.api.PersistentBus;
import org.killbill.billing.catalog.DefaultCatalogService;
import org.killbill.billing.catalog.api.Catalog;
import org.killbill.billing.catalog.api.CatalogService;
import org.killbill.billing.catalog.api.Currency;
-import org.killbill.clock.ClockMock;
import org.killbill.billing.entitlement.api.EntitlementApi;
import org.killbill.billing.entitlement.api.SubscriptionApi;
import org.killbill.billing.entitlement.dao.BlockingStateDao;
@@ -51,10 +44,18 @@ import org.killbill.billing.subscription.api.SubscriptionBaseInternalApi;
import org.killbill.billing.subscription.api.SubscriptionBaseService;
import org.killbill.billing.subscription.engine.core.DefaultSubscriptionBaseService;
import org.killbill.billing.tag.TagInternalApi;
+import org.killbill.billing.util.KillbillConfigSource;
import org.killbill.billing.util.api.AuditUserApi;
import org.killbill.billing.util.callcontext.InternalCallContextFactory;
import org.killbill.billing.util.svcsapi.bus.BusService;
import org.killbill.billing.util.tag.dao.TagDao;
+import org.killbill.bus.api.PersistentBus;
+import org.killbill.clock.ClockMock;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
import com.google.inject.Guice;
import com.google.inject.Inject;
@@ -62,7 +63,6 @@ import com.google.inject.Injector;
import com.google.inject.Stage;
import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
public class EntitlementTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteWithEmbeddedDB {
@@ -109,16 +109,13 @@ public class EntitlementTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteWi
protected Catalog catalog;
- private void loadSystemPropertiesFromClasspath(final String resource) {
- final URL url = EntitlementTestSuiteWithEmbeddedDB.class.getResource(resource);
- Assert.assertNotNull(url);
-
- configSource.merge(url);
+ @Override
+ protected KillbillConfigSource getConfigSource() throws IOException, URISyntaxException {
+ return new TestKillbillConfigSource("/entitlement.properties");
}
@BeforeClass(groups = "slow")
protected void beforeClass() throws Exception {
- loadSystemPropertiesFromClasspath("/entitlement.properties");
final Injector injector = Guice.createInjector(Stage.PRODUCTION, new TestEntitlementModuleWithEmbeddedDB(configSource));
injector.injectMembers(this);
}
@@ -149,7 +146,6 @@ public class EntitlementTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteWi
return catalog;
}
-
private void startTestFamework(final TestApiListener testListener,
final ClockMock clock,
final BusService busService,
@@ -169,7 +165,6 @@ public class EntitlementTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteWi
log.debug("STARTED TEST FRAMEWORK");
}
-
private void stopTestFramework(final TestApiListener testListener,
final BusService busService,
final SubscriptionBaseService subscriptionBaseService,
diff --git a/entitlement/src/test/resources/entitlement.properties b/entitlement/src/test/resources/entitlement.properties
index b0bdca1..6fc7e6d 100644
--- a/entitlement/src/test/resources/entitlement.properties
+++ b/entitlement/src/test/resources/entitlement.properties
@@ -1,5 +1 @@
org.killbill.catalog.uri=file:src/test/resources/catalogTest.xml
-org.killbill.persistent.bus.main.sleep=100
-org.killbill.persistent.bus.main.nbThreads=1
-org.killbill.persistent.bus.main.claimed=1
-user.timezone=UTC
invoice/pom.xml 12(+11 -1)
diff --git a/invoice/pom.xml b/invoice/pom.xml
index e5081cc..8f29a64 100644
--- a/invoice/pom.xml
+++ b/invoice/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-invoice</artifactId>
@@ -114,6 +114,16 @@
</dependency>
<dependency>
<groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-mysql</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
<artifactId>killbill-queue</artifactId>
</dependency>
<dependency>
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/template/HtmlInvoiceGenerator.java b/invoice/src/main/java/org/killbill/billing/invoice/template/HtmlInvoiceGenerator.java
index 7ca43a4..cd95a16 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/template/HtmlInvoiceGenerator.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/template/HtmlInvoiceGenerator.java
@@ -33,6 +33,7 @@ import org.killbill.billing.util.LocaleUtils;
import org.killbill.billing.util.email.templates.TemplateEngine;
import org.killbill.billing.util.template.translation.TranslatorConfig;
+import com.google.common.base.Strings;
import com.google.inject.Inject;
public class HtmlInvoiceGenerator {
@@ -59,7 +60,9 @@ public class HtmlInvoiceGenerator {
final Map<String, Object> data = new HashMap<String, Object>();
final DefaultInvoiceTranslator invoiceTranslator = new DefaultInvoiceTranslator(config);
- final Locale locale = LocaleUtils.toLocale(account.getLocale());
+ final String accountLocale = Strings.emptyToNull(account.getLocale());
+ // If no Locale is defined, use the default JVM one
+ final Locale locale = accountLocale == null ? Locale.getDefault() : LocaleUtils.toLocale(accountLocale);
invoiceTranslator.setLocale(locale);
data.put("text", invoiceTranslator);
data.put("account", account);
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/InvoiceTestSuiteNoDB.java b/invoice/src/test/java/org/killbill/billing/invoice/InvoiceTestSuiteNoDB.java
index 3d5a583..c7b34cf 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/InvoiceTestSuiteNoDB.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/InvoiceTestSuiteNoDB.java
@@ -16,34 +16,35 @@
package org.killbill.billing.invoice;
-import java.net.URL;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
+import java.io.IOException;
+import java.net.URISyntaxException;
import org.killbill.billing.GuicyKillbillTestSuiteNoDB;
-import org.killbill.bus.api.PersistentBus;
-import org.killbill.commons.locker.GlobalLocker;
+import org.killbill.billing.TestKillbillConfigSource;
+import org.killbill.billing.account.api.AccountInternalApi;
import org.killbill.billing.currency.api.CurrencyConversionApi;
+import org.killbill.billing.invoice.api.InvoiceInternalApi;
import org.killbill.billing.invoice.api.InvoiceMigrationApi;
import org.killbill.billing.invoice.api.InvoicePaymentApi;
import org.killbill.billing.invoice.api.InvoiceUserApi;
import org.killbill.billing.invoice.dao.InvoiceDao;
import org.killbill.billing.invoice.generator.InvoiceGenerator;
import org.killbill.billing.invoice.glue.TestInvoiceModuleNoDB;
+import org.killbill.billing.junction.BillingInternalApi;
+import org.killbill.billing.subscription.api.SubscriptionBaseInternalApi;
+import org.killbill.billing.util.KillbillConfigSource;
import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.cache.CacheControllerDispatcher;
import org.killbill.billing.util.callcontext.InternalCallContextFactory;
-import org.killbill.clock.Clock;
-import org.killbill.billing.account.api.AccountInternalApi;
-import org.killbill.billing.subscription.api.SubscriptionBaseInternalApi;
-import org.killbill.billing.invoice.api.InvoiceInternalApi;
-import org.killbill.billing.junction.BillingInternalApi;
import org.killbill.billing.util.svcsapi.bus.BusService;
+import org.killbill.bus.api.PersistentBus;
+import org.killbill.clock.Clock;
+import org.killbill.commons.locker.GlobalLocker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
import com.google.inject.Guice;
import com.google.inject.Inject;
@@ -90,17 +91,13 @@ public abstract class InvoiceTestSuiteNoDB extends GuicyKillbillTestSuiteNoDB {
@Inject
protected CurrencyConversionApi currencyConversionApi;
- private void loadSystemPropertiesFromClasspath(final String resource) {
- final URL url = InvoiceTestSuiteNoDB.class.getResource(resource);
- Assert.assertNotNull(url);
-
- configSource.merge(url);
+ @Override
+ protected KillbillConfigSource getConfigSource() throws IOException, URISyntaxException {
+ return new TestKillbillConfigSource("/resource.properties");
}
@BeforeClass(groups = "fast")
protected void beforeClass() throws Exception {
- loadSystemPropertiesFromClasspath("/resource.properties");
-
final Injector injector = Guice.createInjector(new TestInvoiceModuleNoDB(configSource));
injector.injectMembers(this);
}
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/InvoiceTestSuiteWithEmbeddedDB.java b/invoice/src/test/java/org/killbill/billing/invoice/InvoiceTestSuiteWithEmbeddedDB.java
index 429119d..039ede4 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/InvoiceTestSuiteWithEmbeddedDB.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/InvoiceTestSuiteWithEmbeddedDB.java
@@ -16,21 +16,16 @@
package org.killbill.billing.invoice;
-import java.net.URL;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
+import java.io.IOException;
+import java.net.URISyntaxException;
import org.killbill.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
+import org.killbill.billing.TestKillbillConfigSource;
+import org.killbill.billing.account.api.AccountInternalApi;
import org.killbill.billing.account.api.AccountUserApi;
-import org.killbill.bus.api.PersistentBus;
import org.killbill.billing.catalog.api.Currency;
-import org.killbill.commons.locker.GlobalLocker;
import org.killbill.billing.invoice.api.DefaultInvoiceService;
+import org.killbill.billing.invoice.api.InvoiceInternalApi;
import org.killbill.billing.invoice.api.InvoiceMigrationApi;
import org.killbill.billing.invoice.api.InvoicePaymentApi;
import org.killbill.billing.invoice.api.InvoiceService;
@@ -39,17 +34,23 @@ import org.killbill.billing.invoice.dao.InvoiceDao;
import org.killbill.billing.invoice.generator.InvoiceGenerator;
import org.killbill.billing.invoice.glue.TestInvoiceModuleWithEmbeddedDb;
import org.killbill.billing.invoice.notification.NextBillingDateNotifier;
-import org.killbill.notificationq.api.NotificationQueueService;
+import org.killbill.billing.junction.BillingInternalApi;
+import org.killbill.billing.subscription.api.SubscriptionBaseInternalApi;
+import org.killbill.billing.util.KillbillConfigSource;
import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.cache.CacheControllerDispatcher;
import org.killbill.billing.util.callcontext.InternalCallContextFactory;
-import org.killbill.clock.Clock;
import org.killbill.billing.util.dao.NonEntityDao;
-import org.killbill.billing.account.api.AccountInternalApi;
-import org.killbill.billing.subscription.api.SubscriptionBaseInternalApi;
-import org.killbill.billing.invoice.api.InvoiceInternalApi;
-import org.killbill.billing.junction.BillingInternalApi;
import org.killbill.billing.util.svcsapi.bus.BusService;
+import org.killbill.bus.api.PersistentBus;
+import org.killbill.clock.Clock;
+import org.killbill.commons.locker.GlobalLocker;
+import org.killbill.notificationq.api.NotificationQueueService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
import com.google.inject.Guice;
import com.google.inject.Inject;
@@ -108,17 +109,13 @@ public abstract class InvoiceTestSuiteWithEmbeddedDB extends GuicyKillbillTestSu
@Inject
protected TestInvoiceNotificationQListener testInvoiceNotificationQListener;
- private void loadSystemPropertiesFromClasspath(final String resource) {
- final URL url = InvoiceTestSuiteNoDB.class.getResource(resource);
- Assert.assertNotNull(url);
-
- configSource.merge(url);
+ @Override
+ protected KillbillConfigSource getConfigSource() throws IOException, URISyntaxException {
+ return new TestKillbillConfigSource("/resource.properties");
}
@BeforeClass(groups = "slow")
protected void beforeClass() throws Exception {
- loadSystemPropertiesFromClasspath("/resource.properties");
-
final Injector injector = Guice.createInjector(new TestInvoiceModuleWithEmbeddedDb(configSource));
injector.injectMembers(this);
}
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/template/formatters/TestDefaultInvoiceFormatter.java b/invoice/src/test/java/org/killbill/billing/invoice/template/formatters/TestDefaultInvoiceFormatter.java
index 7256586..291af98 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/template/formatters/TestDefaultInvoiceFormatter.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/template/formatters/TestDefaultInvoiceFormatter.java
@@ -24,11 +24,6 @@ import java.util.Map;
import java.util.UUID;
import org.joda.time.LocalDate;
-import org.skife.config.ConfigurationObjectFactory;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
import org.killbill.billing.catalog.api.Currency;
import org.killbill.billing.invoice.InvoiceTestSuiteNoDB;
import org.killbill.billing.invoice.api.Invoice;
@@ -47,6 +42,10 @@ import org.killbill.billing.invoice.model.RepairAdjInvoiceItem;
import org.killbill.billing.invoice.template.translator.DefaultInvoiceTranslator;
import org.killbill.billing.util.email.templates.MustacheTemplateEngine;
import org.killbill.billing.util.template.translation.TranslatorConfig;
+import org.skife.config.ConfigurationObjectFactory;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
public class TestDefaultInvoiceFormatter extends InvoiceTestSuiteNoDB {
@@ -56,7 +55,7 @@ public class TestDefaultInvoiceFormatter extends InvoiceTestSuiteNoDB {
@BeforeClass(groups = "fast")
public void beforeClass() throws Exception {
super.beforeClass();
- config = new ConfigurationObjectFactory(System.getProperties()).build(TranslatorConfig.class);
+ config = new ConfigurationObjectFactory(configSource).build(TranslatorConfig.class);
templateEngine = new MustacheTemplateEngine();
}
@@ -183,7 +182,6 @@ public class TestDefaultInvoiceFormatter extends InvoiceTestSuiteNoDB {
Locale.FRANCE);
}
-
@Test(groups = "fast")
public void testProcessedCurrencyExists() throws Exception {
final Invoice invoice = new DefaultInvoice(UUID.randomUUID(), clock.getUTCNow(), UUID.randomUUID(), new Integer(234), new LocalDate(), new LocalDate(), Currency.BRL, Currency.USD, false);
@@ -225,98 +223,98 @@ public class TestDefaultInvoiceFormatter extends InvoiceTestSuiteNoDB {
invoice.addInvoiceItem(fixedItemBRL);
final String template = "<html>\n" +
- " <head>\n" +
- " <style type=\"text/css\">\n" +
- " #header td { width: 250px; }\n" +
- " #header .company_info { width: 450px; }\n" +
- " #header .label { text-align: right; font-weight: bold; }\n" +
- " #header .label_value { padding-left: 10px; }\n" +
- "\n" +
- " #invoice_items { margin-top: 50px; }\n" +
- " #invoice_items th { border-bottom: solid 2px black; }\n" +
- " #invoice_items td { width: 250px; }\n" +
- " #invoice_items td.amount { width: 125px; }\n" +
- " #invoice_items td.network { width: 350px; }\n" +
- " #invoice_items .amount { text-align: right; }\n" +
- " #invoice_items .label { text-align: right; font-weight: bold; }\n" +
- " </style>\n" +
- " </head>\n" +
- " <body>\n" +
- " <table id=\"header\">\n" +
- " <tr>\n" +
- " <td class=\"company_info\"/>\n" +
- " <td />\n" +
- " <td><h1>{{text.invoiceTitle}}</h1></td>\n" +
- " </tr>\n" +
- " <tr>\n" +
- " <td colspan=\"3\"><img src=\"http://static.foo.com/www/0/main/gfx/front/logo.png\"/></td>\n" +
- " </tr>\n" +
- " <tr>\n" +
- " <td class=\"company_info\" />\n" +
- " <td class=\"label\">{{text.invoiceDate}}</td>\n" +
- " <td class=\"label_value\">{{invoice.formattedInvoiceDate}}</td>\n" +
- " </tr>\n" +
- " <tr>\n" +
- " <td class=\"company_info\" />\n" +
- " <td class=\"label\">{{text.invoiceNumber}}</td>\n" +
- " <td class=\"label_value\">{{invoice.invoiceNumber}}</td>\n" +
- " </tr>\n" +
- " <tr>\n" +
- " <td class=\"company_info\">{{text.companyCountry}}</td>\n" +
- " <td colspan=\"2\" />\n" +
- " </tr>\n" +
- " <tr>\n" +
- " <td class=\"company_info\">{{text.companyUrl}}</td>\n" +
- " <td colspan=\"2\" />\n" +
- " </tr>\n" +
- " </table>\n" +
- "\n" +
- " <table id=\"invoice_items\">\n" +
- " <tr>\n" +
- " <th class=\"network\">{{text.invoiceItemBundleName}}</td>\n" +
- " <th>{{text.invoiceItemDescription}}</td>\n" +
- " <th>{{text.invoiceItemServicePeriod}}</td>\n" +
- " <th>{{text.invoiceItemAmount}}</td>\n" +
- " </tr>\n" +
- " {{#invoice.invoiceItems}}\n" +
- " <tr>\n" +
- " <td class=\"network\">{{description}}</td>\n" +
- " <td>{{planName}}</td>\n" +
- " <td>{{formattedStartDate}}{{#formattedEndDate}} - {{formattedEndDate}}{{/formattedEndDate}}</td>\n" +
- " <td class=\"amount\">{{formattedAmount}}</td>\n" +
- " </tr>\n" +
- " {{/invoice.invoiceItems}}\n" +
- " <tr>\n" +
- " <td colspan=\"4\" height=\"50px\"></td>\n" +
- " </tr>\n" +
- " <tr>\n" +
- " <td colspan=\"2\" />\n" +
- " <td class=\"label\">{{text.invoiceAmount}}</td>\n" +
- " <td class=\"amount\"><strong>{{invoice.formattedChargedAmount}}</strong></td>\n" +
- " </tr>\n" +
- " <tr>\n" +
- " <td colspan=\"2\" />\n" +
- " <td class=\"label\">{{text.invoiceAmountPaid}}" +
- " {{#invoice.processedCurrency}}" +
- " (*)" +
- " {{/invoice.processedCurrency}}\n" +
- " </td>\n" +
- " <td class=\"amount\"><strong>{{invoice.formattedPaidAmount}}</strong></td>\n" +
- " </tr>\n" +
- " <tr>\n" +
- " <td colspan=\"2\" />\n" +
- " <td class=\"label\">{{text.invoiceBalance}}</td>\n" +
- " <td class=\"amount\"><strong>{{invoice.formattedBalance}}</strong></td>\n" +
- " </tr>\n" +
- " </table>\n" +
- " {{#invoice.processedCurrency}}" +
- " {{text.processedPaymentCurrency}} {{invoice.processedCurrency}}." +
- " {{#invoice.processedPaymentRate}}\n" +
- " {{text.processedPaymentRate}} {{invoice.processedPaymentRate}}.\n" +
- " {{/invoice.processedPaymentRate}}" +
- " {{/invoice.processedCurrency}}" +
- " </body>\n" +
- "</html>\n";
+ " <head>\n" +
+ " <style type=\"text/css\">\n" +
+ " #header td { width: 250px; }\n" +
+ " #header .company_info { width: 450px; }\n" +
+ " #header .label { text-align: right; font-weight: bold; }\n" +
+ " #header .label_value { padding-left: 10px; }\n" +
+ "\n" +
+ " #invoice_items { margin-top: 50px; }\n" +
+ " #invoice_items th { border-bottom: solid 2px black; }\n" +
+ " #invoice_items td { width: 250px; }\n" +
+ " #invoice_items td.amount { width: 125px; }\n" +
+ " #invoice_items td.network { width: 350px; }\n" +
+ " #invoice_items .amount { text-align: right; }\n" +
+ " #invoice_items .label { text-align: right; font-weight: bold; }\n" +
+ " </style>\n" +
+ " </head>\n" +
+ " <body>\n" +
+ " <table id=\"header\">\n" +
+ " <tr>\n" +
+ " <td class=\"company_info\"/>\n" +
+ " <td />\n" +
+ " <td><h1>{{text.invoiceTitle}}</h1></td>\n" +
+ " </tr>\n" +
+ " <tr>\n" +
+ " <td colspan=\"3\"><img src=\"http://static.foo.com/www/0/main/gfx/front/logo.png\"/></td>\n" +
+ " </tr>\n" +
+ " <tr>\n" +
+ " <td class=\"company_info\" />\n" +
+ " <td class=\"label\">{{text.invoiceDate}}</td>\n" +
+ " <td class=\"label_value\">{{invoice.formattedInvoiceDate}}</td>\n" +
+ " </tr>\n" +
+ " <tr>\n" +
+ " <td class=\"company_info\" />\n" +
+ " <td class=\"label\">{{text.invoiceNumber}}</td>\n" +
+ " <td class=\"label_value\">{{invoice.invoiceNumber}}</td>\n" +
+ " </tr>\n" +
+ " <tr>\n" +
+ " <td class=\"company_info\">{{text.companyCountry}}</td>\n" +
+ " <td colspan=\"2\" />\n" +
+ " </tr>\n" +
+ " <tr>\n" +
+ " <td class=\"company_info\">{{text.companyUrl}}</td>\n" +
+ " <td colspan=\"2\" />\n" +
+ " </tr>\n" +
+ " </table>\n" +
+ "\n" +
+ " <table id=\"invoice_items\">\n" +
+ " <tr>\n" +
+ " <th class=\"network\">{{text.invoiceItemBundleName}}</td>\n" +
+ " <th>{{text.invoiceItemDescription}}</td>\n" +
+ " <th>{{text.invoiceItemServicePeriod}}</td>\n" +
+ " <th>{{text.invoiceItemAmount}}</td>\n" +
+ " </tr>\n" +
+ " {{#invoice.invoiceItems}}\n" +
+ " <tr>\n" +
+ " <td class=\"network\">{{description}}</td>\n" +
+ " <td>{{planName}}</td>\n" +
+ " <td>{{formattedStartDate}}{{#formattedEndDate}} - {{formattedEndDate}}{{/formattedEndDate}}</td>\n" +
+ " <td class=\"amount\">{{formattedAmount}}</td>\n" +
+ " </tr>\n" +
+ " {{/invoice.invoiceItems}}\n" +
+ " <tr>\n" +
+ " <td colspan=\"4\" height=\"50px\"></td>\n" +
+ " </tr>\n" +
+ " <tr>\n" +
+ " <td colspan=\"2\" />\n" +
+ " <td class=\"label\">{{text.invoiceAmount}}</td>\n" +
+ " <td class=\"amount\"><strong>{{invoice.formattedChargedAmount}}</strong></td>\n" +
+ " </tr>\n" +
+ " <tr>\n" +
+ " <td colspan=\"2\" />\n" +
+ " <td class=\"label\">{{text.invoiceAmountPaid}}" +
+ " {{#invoice.processedCurrency}}" +
+ " (*)" +
+ " {{/invoice.processedCurrency}}\n" +
+ " </td>\n" +
+ " <td class=\"amount\"><strong>{{invoice.formattedPaidAmount}}</strong></td>\n" +
+ " </tr>\n" +
+ " <tr>\n" +
+ " <td colspan=\"2\" />\n" +
+ " <td class=\"label\">{{text.invoiceBalance}}</td>\n" +
+ " <td class=\"amount\"><strong>{{invoice.formattedBalance}}</strong></td>\n" +
+ " </tr>\n" +
+ " </table>\n" +
+ " {{#invoice.processedCurrency}}" +
+ " {{text.processedPaymentCurrency}} {{invoice.processedCurrency}}." +
+ " {{#invoice.processedPaymentRate}}\n" +
+ " {{text.processedPaymentRate}} {{invoice.processedPaymentRate}}.\n" +
+ " {{/invoice.processedPaymentRate}}" +
+ " {{/invoice.processedCurrency}}" +
+ " </body>\n" +
+ "</html>\n";
final Map<String, Object> data = new HashMap<String, Object>();
@@ -361,7 +359,6 @@ public class TestDefaultInvoiceFormatter extends InvoiceTestSuiteNoDB {
System.out.println(formattedText);
}
-
private void checkOutput(final Invoice invoice, final String template, final String expected, final Locale locale) {
final Map<String, Object> data = new HashMap<String, Object>();
data.put("invoice", new DefaultInvoiceFormatter(config, invoice, locale, null));
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/template/formatters/TestDefaultInvoiceItemFormatter.java b/invoice/src/test/java/org/killbill/billing/invoice/template/formatters/TestDefaultInvoiceItemFormatter.java
index fdd398f..4fda588 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/template/formatters/TestDefaultInvoiceItemFormatter.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/template/formatters/TestDefaultInvoiceItemFormatter.java
@@ -24,12 +24,6 @@ import java.util.UUID;
import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
-import org.skife.config.ConfigurationObjectFactory;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.Test;
-
import org.killbill.billing.catalog.api.Currency;
import org.killbill.billing.invoice.InvoiceTestSuiteNoDB;
import org.killbill.billing.invoice.api.InvoiceItem;
@@ -38,6 +32,10 @@ import org.killbill.billing.invoice.model.RecurringInvoiceItem;
import org.killbill.billing.util.LocaleUtils;
import org.killbill.billing.util.email.templates.MustacheTemplateEngine;
import org.killbill.billing.util.template.translation.TranslatorConfig;
+import org.skife.config.ConfigurationObjectFactory;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
public class TestDefaultInvoiceItemFormatter extends InvoiceTestSuiteNoDB {
@@ -48,7 +46,7 @@ public class TestDefaultInvoiceItemFormatter extends InvoiceTestSuiteNoDB {
@BeforeClass(groups = "fast")
public void beforeClass() throws Exception {
super.beforeClass();
- config = new ConfigurationObjectFactory(System.getProperties()).build(TranslatorConfig.class);
+ config = new ConfigurationObjectFactory(configSource).build(TranslatorConfig.class);
templateEngine = new MustacheTemplateEngine();
}
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/TestHtmlInvoiceGenerator.java b/invoice/src/test/java/org/killbill/billing/invoice/TestHtmlInvoiceGenerator.java
index d5e59c7..2ad6780 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/TestHtmlInvoiceGenerator.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/TestHtmlInvoiceGenerator.java
@@ -24,13 +24,6 @@ import java.util.Locale;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
-import org.mockito.Mockito;
-import org.skife.config.ConfigurationObjectFactory;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.Test;
-
import org.killbill.billing.account.api.Account;
import org.killbill.billing.catalog.api.Currency;
import org.killbill.billing.invoice.api.Invoice;
@@ -41,6 +34,11 @@ import org.killbill.billing.invoice.template.formatters.DefaultInvoiceFormatterF
import org.killbill.billing.util.email.templates.MustacheTemplateEngine;
import org.killbill.billing.util.email.templates.TemplateEngine;
import org.killbill.billing.util.template.translation.TranslatorConfig;
+import org.mockito.Mockito;
+import org.skife.config.ConfigurationObjectFactory;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
public class TestHtmlInvoiceGenerator extends InvoiceTestSuiteNoDB {
@@ -50,7 +48,7 @@ public class TestHtmlInvoiceGenerator extends InvoiceTestSuiteNoDB {
@BeforeClass(groups = "fast")
public void beforeClass() throws Exception {
super.beforeClass();
- final TranslatorConfig config = new ConfigurationObjectFactory(System.getProperties()).build(TranslatorConfig.class);
+ final TranslatorConfig config = new ConfigurationObjectFactory(configSource).build(TranslatorConfig.class);
final TemplateEngine templateEngine = new MustacheTemplateEngine();
final InvoiceFormatterFactory factory = new DefaultInvoiceFormatterFactory();
g = new HtmlInvoiceGenerator(factory, templateEngine, config, null);
diff --git a/invoice/src/test/resources/resource.properties b/invoice/src/test/resources/resource.properties
index fffad07..ebe435c 100644
--- a/invoice/src/test/resources/resource.properties
+++ b/invoice/src/test/resources/resource.properties
@@ -1 +1 @@
-org.killbill.billing.invoice.maxNumberOfMonthsInFuture = 36
+org.killbill.invoice.maxNumberOfMonthsInFuture=36
jaxrs/pom.xml 13(+11 -2)
diff --git a/jaxrs/pom.xml b/jaxrs/pom.xml
index bb7b693..72d4733 100644
--- a/jaxrs/pom.xml
+++ b/jaxrs/pom.xml
@@ -19,13 +19,12 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-jaxrs</artifactId>
<packaging>jar</packaging>
<name>killbill-jaxrs</name>
-
<dependencies>
<dependency>
<groupId>com.google.code.findbugs</groupId>
@@ -82,6 +81,16 @@
</dependency>
<dependency>
<groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-mysql</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
<artifactId>killbill-queue</artifactId>
</dependency>
<dependency>
junction/pom.xml 12(+11 -1)
diff --git a/junction/pom.xml b/junction/pom.xml
index 5db4c5e..d45b017 100644
--- a/junction/pom.xml
+++ b/junction/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-junction</artifactId>
@@ -119,6 +119,16 @@
</dependency>
<dependency>
<groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-mysql</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
<artifactId>killbill-queue</artifactId>
</dependency>
<dependency>
diff --git a/junction/src/test/java/org/killbill/billing/junction/JunctionTestSuiteWithEmbeddedDB.java b/junction/src/test/java/org/killbill/billing/junction/JunctionTestSuiteWithEmbeddedDB.java
index 7f24b1f..8a4835f 100644
--- a/junction/src/test/java/org/killbill/billing/junction/JunctionTestSuiteWithEmbeddedDB.java
+++ b/junction/src/test/java/org/killbill/billing/junction/JunctionTestSuiteWithEmbeddedDB.java
@@ -16,28 +16,21 @@
package org.killbill.billing.junction;
-import java.net.URL;
+import java.io.IOException;
+import java.net.URISyntaxException;
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.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-
import org.killbill.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
+import org.killbill.billing.TestKillbillConfigSource;
import org.killbill.billing.account.api.AccountData;
import org.killbill.billing.account.api.AccountUserApi;
import org.killbill.billing.api.TestApiListener;
-import org.killbill.bus.api.PersistentBus;
import org.killbill.billing.catalog.DefaultCatalogService;
import org.killbill.billing.catalog.api.Catalog;
import org.killbill.billing.catalog.api.CatalogService;
import org.killbill.billing.catalog.api.Currency;
-import org.killbill.clock.ClockMock;
import org.killbill.billing.entitlement.DefaultEntitlementService;
import org.killbill.billing.entitlement.EntitlementService;
import org.killbill.billing.entitlement.api.EntitlementApi;
@@ -46,8 +39,16 @@ import org.killbill.billing.mock.MockAccountBuilder;
import org.killbill.billing.subscription.api.SubscriptionBaseInternalApi;
import org.killbill.billing.subscription.api.SubscriptionBaseService;
import org.killbill.billing.subscription.engine.core.DefaultSubscriptionBaseService;
+import org.killbill.billing.util.KillbillConfigSource;
import org.killbill.billing.util.callcontext.InternalCallContextFactory;
import org.killbill.billing.util.svcsapi.bus.BusService;
+import org.killbill.bus.api.PersistentBus;
+import org.killbill.clock.ClockMock;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
import com.google.inject.Guice;
import com.google.inject.Inject;
@@ -55,7 +56,6 @@ import com.google.inject.Injector;
import com.google.inject.Stage;
import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
public abstract class JunctionTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteWithEmbeddedDB {
@@ -88,16 +88,13 @@ public abstract class JunctionTestSuiteWithEmbeddedDB extends GuicyKillbillTestS
protected Catalog catalog;
- private void loadSystemPropertiesFromClasspath(final String resource) {
- final URL url = JunctionTestSuiteWithEmbeddedDB.class.getResource(resource);
- Assert.assertNotNull(url);
-
- configSource.merge(url);
+ @Override
+ protected KillbillConfigSource getConfigSource() throws IOException, URISyntaxException {
+ return new TestKillbillConfigSource("/junction.properties");
}
@BeforeClass(groups = "slow")
protected void beforeClass() throws Exception {
- loadSystemPropertiesFromClasspath("/junction.properties");
final Injector injector = Guice.createInjector(Stage.PRODUCTION, new TestJunctionModuleWithEmbeddedDB(configSource));
injector.injectMembers(this);
}
diff --git a/junction/src/test/resources/junction.properties b/junction/src/test/resources/junction.properties
index b0bdca1..6fc7e6d 100644
--- a/junction/src/test/resources/junction.properties
+++ b/junction/src/test/resources/junction.properties
@@ -1,5 +1 @@
org.killbill.catalog.uri=file:src/test/resources/catalogTest.xml
-org.killbill.persistent.bus.main.sleep=100
-org.killbill.persistent.bus.main.nbThreads=1
-org.killbill.persistent.bus.main.claimed=1
-user.timezone=UTC
NEWS 5(+5 -0)
diff --git a/NEWS b/NEWS
index a3c72f4..196936b 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,8 @@
+0.9.2
+ Add org.killbill.server.properties property
+ Add default invoice HTML template
+ Better first time experience when using the jetty-console war
+
0.9.1
Update packages com.ning -> org.killbill
osgi/pom.xml 12(+11 -1)
diff --git a/osgi/pom.xml b/osgi/pom.xml
index 7a18c47..73ca219 100644
--- a/osgi/pom.xml
+++ b/osgi/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-osgi</artifactId>
@@ -104,6 +104,16 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-mysql</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.compendium</artifactId>
</dependency>
osgi-bundles/bundles/jruby/pom.xml 2(+1 -1)
diff --git a/osgi-bundles/bundles/jruby/pom.xml b/osgi-bundles/bundles/jruby/pom.xml
index 02f451a..2a19d82 100644
--- a/osgi-bundles/bundles/jruby/pom.xml
+++ b/osgi-bundles/bundles/jruby/pom.xml
@@ -20,7 +20,7 @@
<parent>
<groupId>org.kill-bill.billing</groupId>
<artifactId>killbill-osgi-bundles</artifactId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-osgi-bundles-jruby</artifactId>
osgi-bundles/bundles/logger/pom.xml 2(+1 -1)
diff --git a/osgi-bundles/bundles/logger/pom.xml b/osgi-bundles/bundles/logger/pom.xml
index cc6442a..344ffef 100644
--- a/osgi-bundles/bundles/logger/pom.xml
+++ b/osgi-bundles/bundles/logger/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill-osgi-bundles</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-osgi-bundles-logger</artifactId>
osgi-bundles/bundles/pom.xml 2(+1 -1)
diff --git a/osgi-bundles/bundles/pom.xml b/osgi-bundles/bundles/pom.xml
index 1360266..eb8ac0b 100644
--- a/osgi-bundles/bundles/pom.xml
+++ b/osgi-bundles/bundles/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill-osgi-all-bundles</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-osgi-bundles</artifactId>
diff --git a/osgi-bundles/bundles/webconsolebranding/pom.xml b/osgi-bundles/bundles/webconsolebranding/pom.xml
index e713012..95fcd57 100644
--- a/osgi-bundles/bundles/webconsolebranding/pom.xml
+++ b/osgi-bundles/bundles/webconsolebranding/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill-osgi-bundles</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-osgi-bundles-webconsolebranding</artifactId>
osgi-bundles/defaultbundles/pom.xml 2(+1 -1)
diff --git a/osgi-bundles/defaultbundles/pom.xml b/osgi-bundles/defaultbundles/pom.xml
index 910a099..35f3577 100644
--- a/osgi-bundles/defaultbundles/pom.xml
+++ b/osgi-bundles/defaultbundles/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill-osgi-all-bundles</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-osgi-bundles-defaultbundles</artifactId>
osgi-bundles/libs/killbill/pom.xml 2(+1 -1)
diff --git a/osgi-bundles/libs/killbill/pom.xml b/osgi-bundles/libs/killbill/pom.xml
index b084407..83726a3 100644
--- a/osgi-bundles/libs/killbill/pom.xml
+++ b/osgi-bundles/libs/killbill/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill-osgi-lib-bundles</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-osgi-bundles-lib-killbill</artifactId>
osgi-bundles/libs/pom.xml 2(+1 -1)
diff --git a/osgi-bundles/libs/pom.xml b/osgi-bundles/libs/pom.xml
index d0d7158..cacb989 100644
--- a/osgi-bundles/libs/pom.xml
+++ b/osgi-bundles/libs/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill-osgi-all-bundles</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-osgi-lib-bundles</artifactId>
osgi-bundles/libs/slf4j-osgi/pom.xml 2(+1 -1)
diff --git a/osgi-bundles/libs/slf4j-osgi/pom.xml b/osgi-bundles/libs/slf4j-osgi/pom.xml
index 4527b4d..08d3230 100644
--- a/osgi-bundles/libs/slf4j-osgi/pom.xml
+++ b/osgi-bundles/libs/slf4j-osgi/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill-osgi-lib-bundles</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-osgi-bundles-lib-slf4j-osgi</artifactId>
osgi-bundles/pom.xml 2(+1 -1)
diff --git a/osgi-bundles/pom.xml b/osgi-bundles/pom.xml
index d0f60ec..c9c5ec8 100644
--- a/osgi-bundles/pom.xml
+++ b/osgi-bundles/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-osgi-all-bundles</artifactId>
osgi-bundles/tests/beatrix/pom.xml 2(+1 -1)
diff --git a/osgi-bundles/tests/beatrix/pom.xml b/osgi-bundles/tests/beatrix/pom.xml
index f1bccdf..da84393 100644
--- a/osgi-bundles/tests/beatrix/pom.xml
+++ b/osgi-bundles/tests/beatrix/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill-osgi-test-bundles</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-osgi-bundles-test-beatrix</artifactId>
osgi-bundles/tests/payment/pom.xml 2(+1 -1)
diff --git a/osgi-bundles/tests/payment/pom.xml b/osgi-bundles/tests/payment/pom.xml
index 2053ff1..4b158f0 100644
--- a/osgi-bundles/tests/payment/pom.xml
+++ b/osgi-bundles/tests/payment/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill-osgi-test-bundles</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-osgi-bundles-test-payment</artifactId>
osgi-bundles/tests/pom.xml 2(+1 -1)
diff --git a/osgi-bundles/tests/pom.xml b/osgi-bundles/tests/pom.xml
index 18750a0..5f537e3 100644
--- a/osgi-bundles/tests/pom.xml
+++ b/osgi-bundles/tests/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill-osgi-all-bundles</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-osgi-test-bundles</artifactId>
overdue/pom.xml 12(+11 -1)
diff --git a/overdue/pom.xml b/overdue/pom.xml
index 7399bc1..ebb9392 100644
--- a/overdue/pom.xml
+++ b/overdue/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-overdue</artifactId>
@@ -99,6 +99,16 @@
</dependency>
<dependency>
<groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-mysql</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
<artifactId>killbill-queue</artifactId>
</dependency>
<dependency>
diff --git a/overdue/src/main/java/org/killbill/billing/overdue/OverdueProperties.java b/overdue/src/main/java/org/killbill/billing/overdue/OverdueProperties.java
index 43b18b9..0957140 100644
--- a/overdue/src/main/java/org/killbill/billing/overdue/OverdueProperties.java
+++ b/overdue/src/main/java/org/killbill/billing/overdue/OverdueProperties.java
@@ -24,7 +24,7 @@ import org.killbill.billing.util.config.KillbillConfig;
public interface OverdueProperties extends KillbillConfig {
- @Config("killbill.overdue.uri")
+ @Config("org.killbill.overdue.uri")
@Default("NoOverdueConfig.xml")
@Description("Overdue configuration location. Either in the classpath or in the filesystem")
public String getConfigURI();
diff --git a/overdue/src/test/resources/resource.properties b/overdue/src/test/resources/resource.properties
index 23ed0f6..781b3a8 100644
--- a/overdue/src/test/resources/resource.properties
+++ b/overdue/src/test/resources/resource.properties
@@ -1,5 +1 @@
org.killbill.catalog.uri=file:src/test/resources/catalogSample.xml
-org.killbill.persistent.bus.main.claimed=1
-user.timezone=UTC
-
-
payment/pom.xml 12(+11 -1)
diff --git a/payment/pom.xml b/payment/pom.xml
index 42aae78..4c8af7f 100644
--- a/payment/pom.xml
+++ b/payment/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-payment</artifactId>
@@ -107,6 +107,16 @@
</dependency>
<dependency>
<groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-mysql</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
<artifactId>killbill-queue</artifactId>
</dependency>
<dependency>
diff --git a/payment/src/test/java/org/killbill/billing/payment/PaymentTestSuiteNoDB.java b/payment/src/test/java/org/killbill/billing/payment/PaymentTestSuiteNoDB.java
index ebf6540..2152a4c 100644
--- a/payment/src/test/java/org/killbill/billing/payment/PaymentTestSuiteNoDB.java
+++ b/payment/src/test/java/org/killbill/billing/payment/PaymentTestSuiteNoDB.java
@@ -16,15 +16,13 @@
package org.killbill.billing.payment;
-import java.net.URL;
-
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
+import java.io.IOException;
+import java.net.URISyntaxException;
import org.killbill.billing.GuicyKillbillTestSuiteNoDB;
-import org.killbill.bus.api.PersistentBus;
+import org.killbill.billing.TestKillbillConfigSource;
+import org.killbill.billing.account.api.AccountInternalApi;
+import org.killbill.billing.invoice.api.InvoiceInternalApi;
import org.killbill.billing.osgi.api.OSGIServiceRegistration;
import org.killbill.billing.payment.api.PaymentApi;
import org.killbill.billing.payment.core.PaymentMethodProcessor;
@@ -34,10 +32,14 @@ import org.killbill.billing.payment.plugin.api.PaymentPluginApi;
import org.killbill.billing.payment.provider.MockPaymentProviderPlugin;
import org.killbill.billing.payment.retry.FailedPaymentRetryService;
import org.killbill.billing.payment.retry.PluginFailureRetryService;
+import org.killbill.billing.util.KillbillConfigSource;
import org.killbill.billing.util.config.PaymentConfig;
-import org.killbill.billing.account.api.AccountInternalApi;
-import org.killbill.billing.invoice.api.InvoiceInternalApi;
+import org.killbill.bus.api.PersistentBus;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+import com.google.common.collect.ImmutableMap;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
@@ -67,19 +69,15 @@ public abstract class PaymentTestSuiteNoDB extends GuicyKillbillTestSuiteNoDB {
@Inject
protected TestPaymentHelper testHelper;
- private void loadSystemPropertiesFromClasspath(final String resource) {
- final URL url = PaymentTestSuiteNoDB.class.getResource(resource);
- Assert.assertNotNull(url);
-
- configSource.merge(url);
- configSource.setProperty("org.killbill.payment.provider.default", MockPaymentProviderPlugin.PLUGIN_NAME);
- configSource.setProperty("killbill.payment.engine.events.off", "false");
+ @Override
+ protected KillbillConfigSource getConfigSource() throws IOException, URISyntaxException {
+ return new TestKillbillConfigSource("/payment.properties",
+ ImmutableMap.<String, String>of("org.killbill.payment.provider.default", MockPaymentProviderPlugin.PLUGIN_NAME,
+ "killbill.payment.engine.events.off", "false"));
}
@BeforeClass(groups = "fast")
protected void beforeClass() throws Exception {
- loadSystemPropertiesFromClasspath("/resource.properties");
-
final Injector injector = Guice.createInjector(new TestPaymentModuleNoDB(configSource, getClock()));
injector.injectMembers(this);
}
diff --git a/payment/src/test/java/org/killbill/billing/payment/PaymentTestSuiteWithEmbeddedDB.java b/payment/src/test/java/org/killbill/billing/payment/PaymentTestSuiteWithEmbeddedDB.java
index 3c2330f..7819d0d 100644
--- a/payment/src/test/java/org/killbill/billing/payment/PaymentTestSuiteWithEmbeddedDB.java
+++ b/payment/src/test/java/org/killbill/billing/payment/PaymentTestSuiteWithEmbeddedDB.java
@@ -16,15 +16,13 @@
package org.killbill.billing.payment;
-import java.net.URL;
-
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
+import java.io.IOException;
+import java.net.URISyntaxException;
import org.killbill.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
-import org.killbill.bus.api.PersistentBus;
+import org.killbill.billing.TestKillbillConfigSource;
+import org.killbill.billing.account.api.AccountInternalApi;
+import org.killbill.billing.invoice.api.InvoiceInternalApi;
import org.killbill.billing.osgi.api.OSGIServiceRegistration;
import org.killbill.billing.payment.api.PaymentApi;
import org.killbill.billing.payment.core.PaymentMethodProcessor;
@@ -35,10 +33,14 @@ import org.killbill.billing.payment.plugin.api.PaymentPluginApi;
import org.killbill.billing.payment.provider.MockPaymentProviderPlugin;
import org.killbill.billing.payment.retry.FailedPaymentRetryService;
import org.killbill.billing.payment.retry.PluginFailureRetryService;
+import org.killbill.billing.util.KillbillConfigSource;
import org.killbill.billing.util.config.PaymentConfig;
-import org.killbill.billing.account.api.AccountInternalApi;
-import org.killbill.billing.invoice.api.InvoiceInternalApi;
+import org.killbill.bus.api.PersistentBus;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+import com.google.common.collect.ImmutableMap;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
@@ -70,19 +72,15 @@ public abstract class PaymentTestSuiteWithEmbeddedDB extends GuicyKillbillTestSu
@Inject
protected TestPaymentHelper testHelper;
- private void loadSystemPropertiesFromClasspath(final String resource) {
- final URL url = PaymentTestSuiteNoDB.class.getResource(resource);
- Assert.assertNotNull(url);
-
- configSource.merge(url);
- configSource.setProperty("org.killbill.payment.provider.default", MockPaymentProviderPlugin.PLUGIN_NAME);
- configSource.setProperty("killbill.payment.engine.events.off", "false");
+ @Override
+ protected KillbillConfigSource getConfigSource() throws IOException, URISyntaxException {
+ return new TestKillbillConfigSource("/payment.properties",
+ ImmutableMap.<String, String>of("org.killbill.payment.provider.default", MockPaymentProviderPlugin.PLUGIN_NAME,
+ "killbill.payment.engine.events.off", "false"));
}
@BeforeClass(groups = "slow")
protected void beforeClass() throws Exception {
- loadSystemPropertiesFromClasspath("/resource.properties");
-
final Injector injector = Guice.createInjector(new TestPaymentModuleWithEmbeddedDB(configSource, getClock()));
injector.injectMembers(this);
}
diff --git a/payment/src/test/resources/payment.properties b/payment/src/test/resources/payment.properties
index 41775d7..34337a0 100644
--- a/payment/src/test/resources/payment.properties
+++ b/payment/src/test/resources/payment.properties
@@ -1,4 +1,3 @@
-killbill.payment.failure.retry.start.sec=3600
-killbill.payment.failure.retry.multiplier=1
-killbill.payment.failure.retry.max.attempts=3
-org.killbill.persistent.bus.main.claimed=1
+org.killbill.payment.failure.retry.start.sec=3600
+org.killbill.payment.failure.retry.multiplier=1
+org.killbill.payment.failure.retry.max.attempts=3
pom.xml 2(+1 -1)
diff --git a/pom.xml b/pom.xml
index 45ea3bf..eb74d3e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,7 +22,7 @@
<version>0.5.30-usage</version>
</parent>
<artifactId>killbill</artifactId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<packaging>pom</packaging>
<name>killbill</name>
<description>Library for managing recurring subscriptions and the associated billing</description>
server/pom.xml 2(+1 -1)
diff --git a/server/pom.xml b/server/pom.xml
index 0ad1aac..7828183 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-server</artifactId>
diff --git a/server/src/main/java/org/killbill/billing/server/filters/KillbillGuiceFilter.java b/server/src/main/java/org/killbill/billing/server/filters/KillbillGuiceFilter.java
index b137ff6..8796a52 100644
--- a/server/src/main/java/org/killbill/billing/server/filters/KillbillGuiceFilter.java
+++ b/server/src/main/java/org/killbill/billing/server/filters/KillbillGuiceFilter.java
@@ -19,19 +19,18 @@ package org.killbill.billing.server.filters;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
+import org.killbill.billing.server.updatechecker.UpdateChecker;
+import org.skife.config.ConfigSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.killbill.billing.server.updatechecker.UpdateChecker;
-
+import com.google.inject.Injector;
import com.google.inject.servlet.GuiceFilter;
public class KillbillGuiceFilter extends GuiceFilter {
private static final Logger log = LoggerFactory.getLogger(KillbillGuiceFilter.class);
- private final UpdateChecker checker = new UpdateChecker();
-
@Override
public void init(final FilterConfig filterConfig) throws ServletException {
super.init(filterConfig);
@@ -39,6 +38,10 @@ public class KillbillGuiceFilter extends GuiceFilter {
// At this point, Kill Bill server is fully initialized
log.info("Kill Bill server has started");
+ // The magic happens in KillbillGuiceListener
+ final Injector injector = (Injector) filterConfig.getServletContext().getAttribute(Injector.class.getName());
+ final ConfigSource configSource = injector.getInstance(ConfigSource.class);
+ final UpdateChecker checker = new UpdateChecker(configSource);
checker.check(filterConfig.getServletContext());
}
}
diff --git a/server/src/main/java/org/killbill/billing/server/listeners/KillbillGuiceListener.java b/server/src/main/java/org/killbill/billing/server/listeners/KillbillGuiceListener.java
index 853185d..87fc64b 100644
--- a/server/src/main/java/org/killbill/billing/server/listeners/KillbillGuiceListener.java
+++ b/server/src/main/java/org/killbill/billing/server/listeners/KillbillGuiceListener.java
@@ -26,27 +26,28 @@ import javax.servlet.ServletContextEvent;
import org.killbill.billing.beatrix.lifecycle.DefaultLifecycle;
import org.killbill.billing.jaxrs.resources.JaxRsResourceBase;
import org.killbill.billing.jaxrs.util.KillbillEventHandler;
-import org.killbill.billing.server.config.DaoConfig;
import org.killbill.billing.server.config.KillbillServerConfig;
import org.killbill.billing.server.healthchecks.KillbillHealthcheck;
import org.killbill.billing.server.modules.KillbillServerModule;
import org.killbill.billing.server.security.TenantFilter;
+import org.killbill.billing.util.KillbillConfigSource;
import org.killbill.billing.util.jackson.ObjectMapper;
import org.killbill.billing.util.svcsapi.bus.BusService;
import org.killbill.bus.api.PersistentBus;
import org.killbill.commons.embeddeddb.EmbeddedDB;
import org.killbill.commons.skeleton.listeners.GuiceServletContextListener;
import org.killbill.commons.skeleton.modules.BaseServerModuleBuilder;
-import org.killbill.commons.skeleton.modules.ConfigModule;
import org.killbill.commons.skeleton.modules.JMXModule;
import org.killbill.commons.skeleton.modules.JaxrsJacksonModule;
import org.killbill.commons.skeleton.modules.StatsModule;
import org.killbill.notificationq.api.NotificationQueueService;
+import org.skife.config.ConfigSource;
import org.skife.config.ConfigurationObjectFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.health.HealthCheck;
import com.codahale.metrics.health.HealthCheckRegistry;
import com.codahale.metrics.servlets.HealthCheckServlet;
import com.codahale.metrics.servlets.MetricsServlet;
@@ -59,10 +60,12 @@ import net.sf.ehcache.management.ManagementService;
public class KillbillGuiceListener extends GuiceServletContextListener {
- public static final Logger logger = LoggerFactory.getLogger(KillbillGuiceListener.class);
+ private static final Logger logger = LoggerFactory.getLogger(KillbillGuiceListener.class);
+
+ public static final ImmutableList<String> METRICS_SERVLETS_PATHS = ImmutableList.<String>of("/1.0/healthcheck", "/1.0/metrics", "/1.0/ping", "/1.0/threads");
private KillbillServerConfig config;
- private DaoConfig daoConfig;
+ private ConfigSource configSource;
private Injector injector;
private DefaultLifecycle killbillLifecycle;
private BusService killbillBusService;
@@ -70,7 +73,7 @@ public class KillbillGuiceListener extends GuiceServletContextListener {
private EmbeddedDB embeddedDB;
protected Module getModule(final ServletContext servletContext) {
- return new KillbillServerModule(servletContext, daoConfig, config.isTestModeEnabled());
+ return new KillbillServerModule(servletContext, config, configSource);
}
private void registerMBeansForCache(final CacheManager cacheManager) {
@@ -82,8 +85,8 @@ public class KillbillGuiceListener extends GuiceServletContextListener {
@Override
public void contextInitialized(final ServletContextEvent event) {
- config = new ConfigurationObjectFactory(System.getProperties()).build(KillbillServerConfig.class);
- daoConfig = new ConfigurationObjectFactory(System.getProperties()).build(DaoConfig.class);
+ configSource = new KillbillConfigSource();
+ config = new ConfigurationObjectFactory(configSource).build(KillbillServerConfig.class);
// Don't filter all requests through Jersey, only the JAX-RS APIs (otherwise,
// things like static resources, favicon, etc. are 404'ed)
@@ -96,10 +99,13 @@ public class KillbillGuiceListener extends GuiceServletContextListener {
}
guiceModules = ImmutableList.<Module>of(builder.build(),
- new ConfigModule(KillbillServerConfig.class, DaoConfig.class),
new JaxrsJacksonModule(new ObjectMapper()),
new JMXModule(KillbillHealthcheck.class, NotificationQueueService.class, PersistentBus.class),
- new StatsModule(KillbillHealthcheck.class),
+ new StatsModule(METRICS_SERVLETS_PATHS.get(0),
+ METRICS_SERVLETS_PATHS.get(1),
+ METRICS_SERVLETS_PATHS.get(2),
+ METRICS_SERVLETS_PATHS.get(3),
+ ImmutableList.<Class<? extends HealthCheck>>of(KillbillHealthcheck.class)),
getModule(event.getServletContext()));
super.contextInitialized(event);
diff --git a/server/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java b/server/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java
index d145ce6..7f4e5ed 100644
--- a/server/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java
+++ b/server/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java
@@ -48,6 +48,7 @@ import org.killbill.billing.payment.glue.PaymentModule;
import org.killbill.billing.server.DefaultServerService;
import org.killbill.billing.server.ServerService;
import org.killbill.billing.server.config.DaoConfig;
+import org.killbill.billing.server.config.KillbillServerConfig;
import org.killbill.billing.server.notifications.PushNotificationListener;
import org.killbill.billing.subscription.glue.DefaultSubscriptionModule;
import org.killbill.billing.tenant.glue.TenantModule;
@@ -72,7 +73,7 @@ import org.killbill.clock.Clock;
import org.killbill.clock.ClockMock;
import org.killbill.commons.embeddeddb.EmbeddedDB;
import org.skife.config.ConfigSource;
-import org.skife.config.SimplePropertyConfigSource;
+import org.skife.config.ConfigurationObjectFactory;
import org.skife.jdbi.v2.DBI;
import org.skife.jdbi.v2.IDBI;
@@ -81,13 +82,14 @@ import com.google.inject.AbstractModule;
public class KillbillServerModule extends AbstractModule {
protected final ServletContext servletContext;
- private final DaoConfig daoConfig;
- private final boolean isTestModeEnabled;
- public KillbillServerModule(final ServletContext servletContext, final DaoConfig daoConfig, final boolean testModeEnabled) {
+ private final KillbillServerConfig serverConfig;
+ private final ConfigSource configSource;
+
+ public KillbillServerModule(final ServletContext servletContext, final KillbillServerConfig serverConfig, final ConfigSource configSource) {
this.servletContext = servletContext;
- this.daoConfig = daoConfig;
- this.isTestModeEnabled = testModeEnabled;
+ this.serverConfig = serverConfig;
+ this.configSource = configSource;
}
@Override
@@ -135,7 +137,7 @@ public class KillbillServerModule extends AbstractModule {
}
protected void installClock() {
- if (isTestModeEnabled) {
+ if (serverConfig.isTestModeEnabled()) {
bind(Clock.class).to(ClockMock.class).asEagerSingleton();
bind(TestResource.class).asEagerSingleton();
} else {
@@ -144,7 +146,10 @@ public class KillbillServerModule extends AbstractModule {
}
protected void installKillbillModules() {
- final ConfigSource configSource = new SimplePropertyConfigSource(System.getProperties());
+ bind(ConfigSource.class).toInstance(configSource);
+ bind(KillbillServerConfig.class).toInstance(serverConfig);
+ final DaoConfig daoConfig = new ConfigurationObjectFactory(configSource).build(DaoConfig.class);
+ bind(DaoConfig.class).toInstance(daoConfig);
// TODO Pierre Refactor GlobalLockerModule for this to be a real provider?
final EmbeddedDBProvider embeddedDBProvider = new EmbeddedDBProvider(daoConfig);
@@ -179,7 +184,7 @@ public class KillbillServerModule extends AbstractModule {
install(new RecordIdModule());
install(new KillBillShiroWebModule(servletContext, configSource));
install(new KillBillShiroAopModule());
- install(new SecurityModule());
+ install(new SecurityModule(configSource));
installClock();
}
}
diff --git a/server/src/main/java/org/killbill/billing/server/security/KillbillJdbcRealm.java b/server/src/main/java/org/killbill/billing/server/security/KillbillJdbcRealm.java
index 406f580..ddaa9eb 100644
--- a/server/src/main/java/org/killbill/billing/server/security/KillbillJdbcRealm.java
+++ b/server/src/main/java/org/killbill/billing/server/security/KillbillJdbcRealm.java
@@ -25,7 +25,6 @@ import org.apache.shiro.realm.jdbc.JdbcRealm;
import org.apache.shiro.util.ByteSource;
import org.killbill.billing.server.config.DaoConfig;
import org.killbill.billing.tenant.security.KillbillCredentialsMatcher;
-import org.skife.config.ConfigurationObjectFactory;
import com.jolbox.bonecp.BoneCPConfig;
import com.jolbox.bonecp.BoneCPDataSource;
@@ -37,8 +36,13 @@ public class KillbillJdbcRealm extends JdbcRealm {
private static final String KILLBILL_AUTHENTICATION_QUERY = "select api_secret, api_salt from tenants where api_key = ?";
- public KillbillJdbcRealm() {
+ private final DaoConfig config;
+
+ public KillbillJdbcRealm(final DaoConfig config) {
super();
+
+ this.config = config;
+
configureSecurity();
configureQueries();
configureDataSource();
@@ -65,9 +69,6 @@ public class KillbillJdbcRealm extends JdbcRealm {
}
private void configureDataSource() {
- // This class is initialized by Shiro, not Guice - we need to retrieve the config manually
- final DaoConfig config = new ConfigurationObjectFactory(System.getProperties()).build(DaoConfig.class);
-
final BoneCPConfig dbConfig = new BoneCPConfig();
dbConfig.setJdbcUrl(config.getJdbcUrl());
dbConfig.setUsername(config.getUsername());
diff --git a/server/src/main/java/org/killbill/billing/server/security/TenantFilter.java b/server/src/main/java/org/killbill/billing/server/security/TenantFilter.java
index ed76073..6ff2055 100644
--- a/server/src/main/java/org/killbill/billing/server/security/TenantFilter.java
+++ b/server/src/main/java/org/killbill/billing/server/security/TenantFilter.java
@@ -34,13 +34,14 @@ import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
import org.apache.shiro.realm.Realm;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import org.killbill.billing.jaxrs.resources.JaxrsResource;
+import org.killbill.billing.server.config.DaoConfig;
+import org.killbill.billing.server.listeners.KillbillGuiceListener;
import org.killbill.billing.tenant.api.Tenant;
import org.killbill.billing.tenant.api.TenantApiException;
import org.killbill.billing.tenant.api.TenantUserApi;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.collect.ImmutableList;
@@ -55,21 +56,20 @@ public class TenantFilter implements Filter {
@Inject
private TenantUserApi tenantUserApi;
- private final ModularRealmAuthenticator modularRealmAuthenticator;
+ @Inject
+ private DaoConfig daoConfig;
- public TenantFilter() {
- final Realm killbillJdbcRealm = new KillbillJdbcRealm();
+ private ModularRealmAuthenticator modularRealmAuthenticator;
+ @Override
+ public void init(final FilterConfig filterConfig) throws ServletException {
+ final Realm killbillJdbcRealm = new KillbillJdbcRealm(daoConfig);
// We use Shiro to verify the api credentials - but the Shiro Subject is only used for RBAC
modularRealmAuthenticator = new ModularRealmAuthenticator();
modularRealmAuthenticator.setRealms(ImmutableList.<Realm>of(killbillJdbcRealm));
}
@Override
- public void init(final FilterConfig filterConfig) throws ServletException {
- }
-
- @Override
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
if (shouldSkipFilter(request)) {
chain.doFilter(request, response);
@@ -121,11 +121,16 @@ public class TenantFilter implements Filter {
private boolean shouldSkipFilter(final ServletRequest request) {
boolean shouldSkip = false;
- // Chicken - egg problem
if (request instanceof HttpServletRequest) {
final HttpServletRequest httpServletRequest = (HttpServletRequest) request;
final String path = httpServletRequest.getRequestURI();
- if ("/1.0/kb/tenants".equals(path) && "POST".equals(httpServletRequest.getMethod())) {
+ if ( // Chicken - egg problem
+ ("/1.0/kb/tenants".equals(path) && "POST".equals(httpServletRequest.getMethod())) ||
+ // Metrics servlets
+ (KillbillGuiceListener.METRICS_SERVLETS_PATHS.contains(path) && "GET".equals(httpServletRequest.getMethod())) ||
+ // Welcome screen, static resources, etc.
+ (!path.startsWith("/1.0") && "GET".equals(httpServletRequest.getMethod()))
+ ) {
shouldSkip = true;
}
}
diff --git a/server/src/main/java/org/killbill/billing/server/updatechecker/ClientInfo.java b/server/src/main/java/org/killbill/billing/server/updatechecker/ClientInfo.java
index 5e4ff67..8d96e8d 100644
--- a/server/src/main/java/org/killbill/billing/server/updatechecker/ClientInfo.java
+++ b/server/src/main/java/org/killbill/billing/server/updatechecker/ClientInfo.java
@@ -17,10 +17,12 @@
package org.killbill.billing.server.updatechecker;
import java.net.InetAddress;
-import java.util.Properties;
import javax.servlet.ServletContext;
+import org.skife.config.ConfigSource;
+
+import com.google.common.base.Objects;
import com.google.common.base.StandardSystemProperty;
import com.google.common.base.Strings;
@@ -40,17 +42,17 @@ public class ClientInfo {
static {
try {
CLIENT_ID = InetAddress.getLocalHost().hashCode();
- } catch (Throwable t) {
+ } catch (final Throwable t) {
CLIENT_ID = 0;
}
}
private final ServletContext servletContext;
- private final Properties props;
+ private final ConfigSource props;
- public ClientInfo(final ServletContext servletContext) {
+ public ClientInfo(final ConfigSource configSource, final ServletContext servletContext) {
this.servletContext = servletContext;
- this.props = System.getProperties();
+ this.props = configSource;
}
public String getServletMajorVersion() {
@@ -150,7 +152,7 @@ public class ClientInfo {
}
private String getProperty(final StandardSystemProperty standardKey) {
- return getSanitizedString(props.getProperty(standardKey.key(), UNKNOWN));
+ return getSanitizedString(Objects.firstNonNull(props.getString(standardKey.key()), UNKNOWN));
}
private String getSanitizedString(final String string) {
diff --git a/server/src/main/java/org/killbill/billing/server/updatechecker/Tracker.java b/server/src/main/java/org/killbill/billing/server/updatechecker/Tracker.java
index f56f4fd..d49a101 100644
--- a/server/src/main/java/org/killbill/billing/server/updatechecker/Tracker.java
+++ b/server/src/main/java/org/killbill/billing/server/updatechecker/Tracker.java
@@ -18,11 +18,10 @@ package org.killbill.billing.server.updatechecker;
import javax.servlet.ServletContext;
+import org.skife.config.ConfigSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.killbill.billing.server.config.UpdateCheckConfig;
-
import com.dmurph.tracking.AnalyticsConfigData;
import com.dmurph.tracking.JGoogleAnalyticsTracker;
import com.dmurph.tracking.JGoogleAnalyticsTracker.GoogleAnalyticsVersion;
@@ -38,9 +37,9 @@ public class Tracker {
private final ClientInfo clientInfo;
private final JGoogleAnalyticsTracker tracker;
- public Tracker(final ProductInfo productInfo, final ServletContext context) {
+ public Tracker(final ConfigSource configSource, final ProductInfo productInfo, final ServletContext context) {
this.productInfo = productInfo;
- this.clientInfo = new ClientInfo(context);
+ this.clientInfo = new ClientInfo(configSource, context);
final AnalyticsConfigData analyticsConfigData = new AnalyticsConfigData(TRACKING_CODE);
this.tracker = new JGoogleAnalyticsTracker(analyticsConfigData, GoogleAnalyticsVersion.V_4_7_2);
diff --git a/server/src/main/java/org/killbill/billing/server/updatechecker/UpdateChecker.java b/server/src/main/java/org/killbill/billing/server/updatechecker/UpdateChecker.java
index a19326f..b639608 100644
--- a/server/src/main/java/org/killbill/billing/server/updatechecker/UpdateChecker.java
+++ b/server/src/main/java/org/killbill/billing/server/updatechecker/UpdateChecker.java
@@ -20,17 +20,23 @@ import java.io.IOException;
import javax.servlet.ServletContext;
+import org.killbill.billing.server.config.UpdateCheckConfig;
+import org.skife.config.ConfigSource;
import org.skife.config.ConfigurationObjectFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.killbill.billing.server.config.UpdateCheckConfig;
-
public class UpdateChecker {
private static final Logger log = LoggerFactory.getLogger(UpdateChecker.class);
- final UpdateCheckConfig config = new ConfigurationObjectFactory(System.getProperties()).build(UpdateCheckConfig.class);
+ private final ConfigSource configSource;
+ private final UpdateCheckConfig config;
+
+ public UpdateChecker(final ConfigSource configSource) {
+ this.configSource = configSource;
+ this.config = new ConfigurationObjectFactory(configSource).build(UpdateCheckConfig.class);
+ }
public void check(final ServletContext servletContext) {
log.info("For Kill Bill Commercial Support, visit http://thebillingproject.com or send an email to support@thebillingproject.com");
@@ -44,7 +50,7 @@ public class UpdateChecker {
public void run() {
try {
doCheck(servletContext);
- } catch (IOException e) {
+ } catch (final IOException e) {
// Don't pollute logs, maybe no internet access?
log.debug("Unable to perform update check", e);
}
@@ -88,11 +94,10 @@ public class UpdateChecker {
}
// Send anonymous data
- final Tracker tracker = new Tracker(productInfo, servletContext);
+ final Tracker tracker = new Tracker(configSource, productInfo, servletContext);
tracker.track();
}
-
private boolean shouldSkipUpdateCheck() {
if (config.shouldSkipUpdateCheck()) {
return true;
@@ -101,7 +106,7 @@ public class UpdateChecker {
try {
Class.forName("org.testng.Assert");
return true;
- } catch (ClassNotFoundException e) {
+ } catch (final ClassNotFoundException e) {
return false;
}
}
diff --git a/server/src/main/resources/killbill-server.properties b/server/src/main/resources/killbill-server.properties
index 3d85b58..9254ec7 100644
--- a/server/src/main/resources/killbill-server.properties
+++ b/server/src/main/resources/killbill-server.properties
@@ -23,12 +23,6 @@ org.killbill.dao.password=root
# Use the SpyCarAdvanced.xml catalog
org.killbill.catalog.uri=SpyCarAdvanced.xml
-# Set default timezone to UTC
-user.timezone=UTC
-
-# For bundles that use antlr (string template)
-ANTLR_USE_DIRECT_CLASS_LOADING=true
-
# To enable test endpoint and have Kill Bill run with a ClockMock
org.killbill.server.test.mode=true
@@ -42,8 +36,6 @@ org.killbill.persistent.bus.main.claimed=1
org.killbill.persistent.bus.external.sleep=100
org.killbill.persistent.bus.external.nbThreads=1
org.killbill.persistent.bus.external.claimed=1
-org.killbill.persistent.bus.external.tableName=bus_ext_events
-org.killbill.persistent.bus.external.historyTableName=bus_ext_events_history
org.killbill.server.multitenant=false
diff --git a/server/src/main/resources/update-checker/killbill-server-update-list.properties b/server/src/main/resources/update-checker/killbill-server-update-list.properties
index cec6222..859fa48 100644
--- a/server/src/main/resources/update-checker/killbill-server-update-list.properties
+++ b/server/src/main/resources/update-checker/killbill-server-update-list.properties
@@ -3,11 +3,21 @@
### 0.9.x series ###
-## 0.9.1 -- latest release
-0.9.1.updates =
-0.9.1.notices = This is an unstable release
+## 0.9.2 -- latest release
+0.9.2.updates =
+0.9.2.notices = This is an unstable release
+0.9.2.release-notes = http://kill-bill.org
+
+## 0.9.1
+0.9.1.updates = 0.9.2
+0.9.1.notices = We recommend upgrading to 0.9.2
0.9.1.release-notes = http://kill-bill.org
+## 0.9.0
+0.9.0.updates = 0.9.2
+0.9.0.notices = We recommend upgrading to 0.9.2
+0.9.0.release-notes = http://kill-bill.org
+
### 0.8.x series ###
## 0.8.13 -- latest stable release
diff --git a/server/src/test/java/org/killbill/billing/jaxrs/TestJaxrsBase.java b/server/src/test/java/org/killbill/billing/jaxrs/TestJaxrsBase.java
index a1845ec..3e4aa16 100644
--- a/server/src/test/java/org/killbill/billing/jaxrs/TestJaxrsBase.java
+++ b/server/src/test/java/org/killbill/billing/jaxrs/TestJaxrsBase.java
@@ -17,7 +17,7 @@
package org.killbill.billing.jaxrs;
import java.io.IOException;
-import java.net.URL;
+import java.net.URISyntaxException;
import java.util.EventListener;
import java.util.Iterator;
import java.util.Map;
@@ -31,7 +31,7 @@ import org.eclipse.jetty.servlet.FilterHolder;
import org.joda.time.LocalDate;
import org.killbill.billing.DBTestingHelper;
import org.killbill.billing.GuicyKillbillTestWithEmbeddedDBModule;
-import org.killbill.billing.KillbillConfigSource;
+import org.killbill.billing.TestKillbillConfigSource;
import org.killbill.billing.account.glue.DefaultAccountModule;
import org.killbill.billing.api.TestApiListener;
import org.killbill.billing.beatrix.glue.BeatrixModule;
@@ -53,12 +53,14 @@ import org.killbill.billing.overdue.glue.DefaultOverdueModule;
import org.killbill.billing.payment.glue.PaymentModule;
import org.killbill.billing.payment.provider.MockPaymentProviderPluginModule;
import org.killbill.billing.server.config.DaoConfig;
+import org.killbill.billing.server.config.KillbillServerConfig;
import org.killbill.billing.server.listeners.KillbillGuiceListener;
import org.killbill.billing.server.modules.KillBillShiroWebModule;
import org.killbill.billing.server.modules.KillbillServerModule;
import org.killbill.billing.subscription.glue.DefaultSubscriptionModule;
import org.killbill.billing.tenant.glue.TenantModule;
import org.killbill.billing.usage.glue.UsageModule;
+import org.killbill.billing.util.KillbillConfigSource;
import org.killbill.billing.util.cache.CacheControllerDispatcher;
import org.killbill.billing.util.config.PaymentConfig;
import org.killbill.billing.util.email.EmailModule;
@@ -89,8 +91,6 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.inject.Module;
-import static org.testng.Assert.assertNotNull;
-
public class TestJaxrsBase extends KillbillClient {
protected static final String PLUGIN_NAME = "noop";
@@ -102,8 +102,7 @@ public class TestJaxrsBase extends KillbillClient {
protected CacheControllerDispatcher cacheControllerDispatcher;
@Inject
- protected @javax.inject.Named(BeatrixModule.EXTERNAL_BUS)
- PersistentBus externalBus;
+ protected @javax.inject.Named(BeatrixModule.EXTERNAL_BUS) PersistentBus externalBus;
@Inject
protected PersistentBus internalBus;
@@ -111,33 +110,33 @@ public class TestJaxrsBase extends KillbillClient {
@Inject
protected TestApiListener busHandler;
+ protected DaoConfig daoConfig;
+ protected KillbillServerConfig serverConfig;
+
protected static TestKillbillGuiceListener listener;
protected HttpServerConfig config;
private HttpServer server;
- public static void loadSystemPropertiesFromClasspath(final String resource) {
- final URL url = TestJaxrsBase.class.getResource(resource);
- assertNotNull(url);
- try {
- System.getProperties().load(url.openStream());
- } catch (final IOException e) {
- throw new RuntimeException(e);
- }
+ @Override
+ protected KillbillConfigSource getConfigSource() throws IOException, URISyntaxException {
+ return new TestKillbillConfigSource("/killbill.properties");
}
- public static class TestKillbillGuiceListener extends KillbillGuiceListener {
+ public class TestKillbillGuiceListener extends KillbillGuiceListener {
- private final DaoConfig daoConfig;
+ private final KillbillServerConfig serverConfig;
+ private final ConfigSource configSource;
- public TestKillbillGuiceListener(final DaoConfig daoConfig) {
+ public TestKillbillGuiceListener(final KillbillServerConfig serverConfig, final ConfigSource configSource) {
super();
- this.daoConfig = daoConfig;
+ this.serverConfig = serverConfig;
+ this.configSource = configSource;
}
@Override
protected Module getModule(final ServletContext servletContext) {
- return new TestKillbillServerModule(daoConfig, servletContext);
+ return new TestKillbillServerModule(servletContext, serverConfig, configSource);
}
}
@@ -154,10 +153,10 @@ public class TestJaxrsBase extends KillbillClient {
}
}
- public static class TestKillbillServerModule extends KillbillServerModule {
+ public class TestKillbillServerModule extends KillbillServerModule {
- public TestKillbillServerModule(final DaoConfig daoConfig, final ServletContext servletContext) {
- super(servletContext, daoConfig, false);
+ public TestKillbillServerModule(final ServletContext servletContext, final KillbillServerConfig serverConfig, final ConfigSource configSource) {
+ super(servletContext, serverConfig, configSource);
}
@Override
@@ -170,7 +169,7 @@ public class TestJaxrsBase extends KillbillClient {
// Already done By Top test class
}
- private static final class PaymentMockModule extends PaymentModule {
+ private final class PaymentMockModule extends PaymentModule {
public PaymentMockModule(final ConfigSource configSource) {
super(configSource);
@@ -184,8 +183,6 @@ public class TestJaxrsBase extends KillbillClient {
@Override
protected void installKillbillModules() {
- final KillbillConfigSource configSource = new KillbillConfigSource(System.getProperties());
-
/*
* For a lack of getting module override working, copy all install modules from parent class...
*
@@ -193,6 +190,10 @@ public class TestJaxrsBase extends KillbillClient {
Modules.override(new org.killbill.billing.payment.setup.PaymentModule()).with(new PaymentMockModule());
*/
+ bind(ConfigSource.class).toInstance(configSource);
+ bind(KillbillServerConfig.class).toInstance(serverConfig);
+ bind(DaoConfig.class).toInstance(daoConfig);
+
install(new GuicyKillbillTestWithEmbeddedDBModule());
install(new EmailModule(configSource));
@@ -224,7 +225,7 @@ public class TestJaxrsBase extends KillbillClient {
installClock();
install(new KillBillShiroWebModule(servletContext, configSource));
install(new KillBillShiroAopModule());
- install(new SecurityModule());
+ install(new SecurityModule(configSource));
}
}
@@ -285,29 +286,29 @@ public class TestJaxrsBase extends KillbillClient {
@BeforeClass(groups = "slow")
public void beforeClass() throws Exception {
- loadConfig();
-
- listener.getInstantiatedInjector().injectMembers(this);
- }
-
- protected void loadConfig() {
+ // TODO PIERRE Unclear why both are needed in beforeClass and beforeSuite
if (config == null) {
config = new ConfigurationObjectFactory(System.getProperties()).build(HttpServerConfig.class);
}
-
- // For shiro (outside of Guice control)
- System.setProperty("org.killbill.dao.url", DBTestingHelper.get().getJdbcConnectionString());
- System.setProperty("org.killbill.dao.user", DBTestingHelper.get().getUsername());
- System.setProperty("org.killbill.dao.password", DBTestingHelper.get().getPassword());
+ if (daoConfig == null) {
+ daoConfig = new ConfigurationObjectFactory(configSource).build(DaoConfig.class);
+ }
+ listener.getInstantiatedInjector().injectMembers(this);
}
@BeforeSuite(groups = "slow")
public void beforeSuite() throws Exception {
super.beforeSuite();
- loadSystemPropertiesFromClasspath("/killbill.properties");
- loadConfig();
- listener = new TestKillbillGuiceListener(new ConfigurationObjectFactory(System.getProperties()).build(DaoConfig.class));
+ if (config == null) {
+ config = new ConfigurationObjectFactory(System.getProperties()).build(HttpServerConfig.class);
+ }
+ if (daoConfig == null) {
+ daoConfig = new ConfigurationObjectFactory(configSource).build(DaoConfig.class);
+ }
+
+ serverConfig = new ConfigurationObjectFactory(configSource).build(KillbillServerConfig.class);
+ listener = new TestKillbillGuiceListener(serverConfig, configSource);
server = new HttpServer();
server.configure(config, getListeners(), getFilters());
diff --git a/server/src/test/java/org/killbill/billing/jaxrs/TestOverdue.java b/server/src/test/java/org/killbill/billing/jaxrs/TestOverdue.java
index a473a9d..87e9b83 100644
--- a/server/src/test/java/org/killbill/billing/jaxrs/TestOverdue.java
+++ b/server/src/test/java/org/killbill/billing/jaxrs/TestOverdue.java
@@ -17,14 +17,17 @@
package org.killbill.billing.jaxrs;
import java.math.BigDecimal;
+import java.util.Comparator;
import java.util.List;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
import org.killbill.billing.client.model.Account;
import org.killbill.billing.client.model.Invoice;
+import org.killbill.billing.client.model.Invoices;
import org.killbill.billing.client.model.Payment;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.Ordering;
import static org.testng.Assert.assertEquals;
@@ -55,8 +58,17 @@ public class TestOverdue extends TestJaxrsBase {
crappyWaitForLackOfProperSynchonization();
Assert.assertEquals(killBillClient.getOverdueStateForAccount(accountJson.getAccountId()).getName(), "OD3");
- // Post external payments
- for (final Invoice invoice : killBillClient.getInvoicesForAccount(accountJson.getAccountId())) {
+ // Post external payments, paying the most recent invoice first: this is to avoid a race condition where
+ // a refresh overdue notification kicks in after the first payment, which makes the account goes CLEAR and
+ // triggers an AUTO_INVOICE_OFF tag removal (hence adjustment of the other invoices balance).
+ final Invoices invoicesForAccount = killBillClient.getInvoicesForAccount(accountJson.getAccountId());
+ final List<Invoice> mostRecentInvoiceFirst = Ordering.<Invoice>from(new Comparator<Invoice>() {
+ @Override
+ public int compare(final Invoice invoice1, final Invoice invoice2) {
+ return invoice1.getInvoiceDate().compareTo(invoice2.getInvoiceDate());
+ }
+ }).reverse().sortedCopy(invoicesForAccount);
+ for (final Invoice invoice : mostRecentInvoiceFirst) {
if (invoice.getBalance().compareTo(BigDecimal.ZERO) > 0) {
final Payment payment = new Payment();
payment.setAccountId(accountJson.getAccountId());
diff --git a/server/src/test/java/org/killbill/billing/server/security/TestKillbillJdbcRealm.java b/server/src/test/java/org/killbill/billing/server/security/TestKillbillJdbcRealm.java
index 5e5e918..d2cbbe2 100644
--- a/server/src/test/java/org/killbill/billing/server/security/TestKillbillJdbcRealm.java
+++ b/server/src/test/java/org/killbill/billing/server/security/TestKillbillJdbcRealm.java
@@ -24,15 +24,14 @@ import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.support.DelegatingSubject;
-import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
import org.killbill.billing.jaxrs.TestJaxrsBase;
import org.killbill.billing.tenant.api.DefaultTenant;
import org.killbill.billing.tenant.dao.DefaultTenantDao;
import org.killbill.billing.tenant.dao.TenantModelDao;
import org.killbill.billing.util.dao.DefaultNonEntityDao;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
import com.jolbox.bonecp.BoneCPConfig;
import com.jolbox.bonecp.BoneCPDataSource;
@@ -45,7 +44,6 @@ public class TestKillbillJdbcRealm extends TestJaxrsBase {
@Override
@BeforeMethod(groups = "slow")
public void beforeMethod() throws Exception {
-
super.beforeMethod();
// Create the tenant
@@ -61,7 +59,7 @@ public class TestKillbillJdbcRealm extends TestJaxrsBase {
dbConfig.setPassword(helper.getPassword());
final KillbillJdbcRealm jdbcRealm;
- jdbcRealm = new KillbillJdbcRealm();
+ jdbcRealm = new KillbillJdbcRealm(daoConfig);
jdbcRealm.setDataSource(new BoneCPDataSource(dbConfig));
securityManager = new DefaultSecurityManager(jdbcRealm);
diff --git a/server/src/test/resources/killbill.properties b/server/src/test/resources/killbill.properties
index 52e5ca9..1949e5a 100644
--- a/server/src/test/resources/killbill.properties
+++ b/server/src/test/resources/killbill.properties
@@ -14,27 +14,11 @@
# under the License.
#
-# Use killbill util test properties (DbiProvider/MysqltestingHelper) on the test side configured with killbill
-org.killbill.billing.dbi.jdbc.url=jdbc:mysql://127.0.0.1:3306/killbill
-
org.killbill.catalog.uri=file:src/test/resources/catalogTest.xml
-killbill.overdue.uri=overdue.xml
+org.killbill.overdue.uri=overdue.xml
-org.killbill.payment.engine.events.off=false
org.killbill.payment.retry.days=8,8,8
-user.timezone=UTC
-
-org.killbill.core.server.jetty.logPath=/var/tmp/.logs
-
-org.killbill.persistent.bus.main.sleep=100
-org.killbill.persistent.bus.main.nbThreads=1
-org.killbill.persistent.bus.main.claimed=1
-org.killbill.persistent.bus.external.sleep=100
-org.killbill.persistent.bus.external.nbThreads=1
-org.killbill.persistent.bus.external.claimed=1
-org.killbill.persistent.bus.external.tableName=bus_ext_events
-org.killbill.persistent.bus.external.historyTableName=bus_ext_events_history
# Local DB
#org.killbill.billing.dbi.test.useLocalDb=true
@@ -42,6 +26,3 @@ org.killbill.osgi.bundle.install.dir=/var/tmp/somethingthatdoesnotexist
# Speed up from the (more secure) default
org.killbill.server.multitenant.hash_iterations=10
-
-ANTLR_USE_DIRECT_CLASS_LOADING=true
-
subscription/pom.xml 12(+11 -1)
diff --git a/subscription/pom.xml b/subscription/pom.xml
index cd1b2c8..5cb4726 100644
--- a/subscription/pom.xml
+++ b/subscription/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-subscription</artifactId>
@@ -108,6 +108,16 @@
</dependency>
<dependency>
<groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-mysql</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
<artifactId>killbill-queue</artifactId>
</dependency>
<dependency>
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteNoDB.java b/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteNoDB.java
index 5a96a8c..2d88272 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteNoDB.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteNoDB.java
@@ -16,26 +16,18 @@
package org.killbill.billing.subscription;
-import java.net.URL;
+import java.io.IOException;
+import java.net.URISyntaxException;
import javax.inject.Inject;
-import org.mockito.Mockito;
-import org.skife.jdbi.v2.IDBI;
-import org.skife.jdbi.v2.tweak.HandleCallback;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-
import org.killbill.billing.GuicyKillbillTestSuiteNoDB;
+import org.killbill.billing.TestKillbillConfigSource;
import org.killbill.billing.account.api.AccountData;
import org.killbill.billing.api.TestApiListener;
import org.killbill.billing.catalog.api.Catalog;
import org.killbill.billing.catalog.api.CatalogService;
-import org.killbill.clock.ClockMock;
+import org.killbill.billing.subscription.api.SubscriptionBaseInternalApi;
import org.killbill.billing.subscription.api.SubscriptionBaseService;
import org.killbill.billing.subscription.api.migration.SubscriptionBaseMigrationApi;
import org.killbill.billing.subscription.api.timeline.SubscriptionBaseTimelineApi;
@@ -45,9 +37,18 @@ import org.killbill.billing.subscription.api.user.TestSubscriptionHelper;
import org.killbill.billing.subscription.engine.dao.MockSubscriptionDaoMemory;
import org.killbill.billing.subscription.engine.dao.SubscriptionDao;
import org.killbill.billing.subscription.glue.TestDefaultSubscriptionModuleNoDB;
+import org.killbill.billing.util.KillbillConfigSource;
import org.killbill.billing.util.config.SubscriptionConfig;
-import org.killbill.billing.subscription.api.SubscriptionBaseInternalApi;
import org.killbill.billing.util.svcsapi.bus.BusService;
+import org.killbill.clock.ClockMock;
+import org.mockito.Mockito;
+import org.skife.jdbi.v2.IDBI;
+import org.skife.jdbi.v2.tweak.HandleCallback;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
import com.google.inject.Guice;
import com.google.inject.Injector;
@@ -95,17 +96,13 @@ public class SubscriptionTestSuiteNoDB extends GuicyKillbillTestSuiteNoDB {
protected AccountData accountData;
protected SubscriptionBaseBundle bundle;
- private void loadSystemPropertiesFromClasspath(final String resource) {
- final URL url = DefaultSubscriptionTestInitializer.class.getResource(resource);
- Assert.assertNotNull(url);
-
- configSource.merge(url);
+ @Override
+ protected KillbillConfigSource getConfigSource() throws IOException, URISyntaxException {
+ return new TestKillbillConfigSource("/subscription.properties");
}
@BeforeClass(groups = "fast")
public void beforeClass() throws Exception {
- loadSystemPropertiesFromClasspath("/subscription.properties");
-
final Injector g = Guice.createInjector(Stage.PRODUCTION, new TestDefaultSubscriptionModuleNoDB(configSource));
g.injectMembers(this);
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteWithEmbeddedDB.java b/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteWithEmbeddedDB.java
index 148aa1c..0be56d3 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteWithEmbeddedDB.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteWithEmbeddedDB.java
@@ -16,23 +16,17 @@
package org.killbill.billing.subscription;
-import java.net.URL;
+import java.io.IOException;
+import java.net.URISyntaxException;
import javax.inject.Inject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-
import org.killbill.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
+import org.killbill.billing.TestKillbillConfigSource;
import org.killbill.billing.account.api.AccountData;
import org.killbill.billing.api.TestApiListener;
import org.killbill.billing.catalog.api.Catalog;
import org.killbill.billing.catalog.api.CatalogService;
-import org.killbill.clock.ClockMock;
import org.killbill.billing.subscription.api.SubscriptionBaseInternalApi;
import org.killbill.billing.subscription.api.SubscriptionBaseService;
import org.killbill.billing.subscription.api.migration.SubscriptionBaseMigrationApi;
@@ -42,8 +36,15 @@ import org.killbill.billing.subscription.api.user.SubscriptionBaseBundle;
import org.killbill.billing.subscription.api.user.TestSubscriptionHelper;
import org.killbill.billing.subscription.engine.dao.SubscriptionDao;
import org.killbill.billing.subscription.glue.TestDefaultSubscriptionModuleWithEmbeddedDB;
+import org.killbill.billing.util.KillbillConfigSource;
import org.killbill.billing.util.config.SubscriptionConfig;
import org.killbill.billing.util.svcsapi.bus.BusService;
+import org.killbill.clock.ClockMock;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
import com.google.inject.Guice;
import com.google.inject.Injector;
@@ -89,17 +90,13 @@ public class SubscriptionTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteW
protected AccountData accountData;
protected SubscriptionBaseBundle bundle;
- private void loadSystemPropertiesFromClasspath(final String resource) {
- final URL url = DefaultSubscriptionTestInitializer.class.getResource(resource);
- Assert.assertNotNull(url);
-
- configSource.merge(url);
+ @Override
+ protected KillbillConfigSource getConfigSource() throws IOException, URISyntaxException {
+ return new TestKillbillConfigSource("/subscription.properties");
}
@BeforeClass(groups = "slow")
public void beforeClass() throws Exception {
- loadSystemPropertiesFromClasspath("/subscription.properties");
-
final Injector g = Guice.createInjector(Stage.PRODUCTION, new TestDefaultSubscriptionModuleWithEmbeddedDB(configSource));
g.injectMembers(this);
}
diff --git a/subscription/src/test/resources/subscription.properties b/subscription/src/test/resources/subscription.properties
index b0bdca1..6fc7e6d 100644
--- a/subscription/src/test/resources/subscription.properties
+++ b/subscription/src/test/resources/subscription.properties
@@ -1,5 +1 @@
org.killbill.catalog.uri=file:src/test/resources/catalogTest.xml
-org.killbill.persistent.bus.main.sleep=100
-org.killbill.persistent.bus.main.nbThreads=1
-org.killbill.persistent.bus.main.claimed=1
-user.timezone=UTC
tenant/pom.xml 12(+11 -1)
diff --git a/tenant/pom.xml b/tenant/pom.xml
index 4cfdf52..0320936 100644
--- a/tenant/pom.xml
+++ b/tenant/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-tenant</artifactId>
@@ -86,6 +86,16 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-mysql</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<scope>test</scope>
usage/pom.xml 12(+11 -1)
diff --git a/usage/pom.xml b/usage/pom.xml
index c6b50ea..83e2d17 100644
--- a/usage/pom.xml
+++ b/usage/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-usage</artifactId>
@@ -77,6 +77,16 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.kill-bill.commons</groupId>
+ <artifactId>killbill-embeddeddb-mysql</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<scope>test</scope>
util/pom.xml 2(+1 -1)
diff --git a/util/pom.xml b/util/pom.xml
index d9ddbf4..de245df 100644
--- a/util/pom.xml
+++ b/util/pom.xml
@@ -12,7 +12,7 @@
<parent>
<artifactId>killbill</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.9.2-SNAPSHOT</version>
+ <version>0.9.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>killbill-util</artifactId>
diff --git a/util/src/main/java/org/killbill/billing/util/config/catalog/UriAccessor.java b/util/src/main/java/org/killbill/billing/util/config/catalog/UriAccessor.java
index b3aad01..5b200a3 100644
--- a/util/src/main/java/org/killbill/billing/util/config/catalog/UriAccessor.java
+++ b/util/src/main/java/org/killbill/billing/util/config/catalog/UriAccessor.java
@@ -24,43 +24,39 @@ import java.net.URISyntaxException;
import java.net.URL;
import java.util.Scanner;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import com.google.common.io.Resources;
public class UriAccessor {
- private final static Logger log = LoggerFactory.getLogger(UriAccessor.class);
-
private static final String URI_SCHEME_FOR_CLASSPATH = "jar";
private static final String URI_SCHEME_FOR_FILE = "file";
- public static InputStream accessUri(String uri) throws IOException, URISyntaxException {
+ public static InputStream accessUri(final String uri) throws IOException, URISyntaxException {
return accessUri(new URI(uri));
}
public static InputStream accessUri(URI uri) throws IOException, URISyntaxException {
- String scheme = uri.getScheme();
- URL url = null;
+ final String scheme = uri.getScheme();
+
+ final URL url;
if (scheme == null) {
uri = new URI(Resources.getResource(uri.toString()).toExternalForm());
} else if (scheme.equals(URI_SCHEME_FOR_CLASSPATH)) {
return UriAccessor.class.getResourceAsStream(uri.getPath());
} else if (scheme.equals(URI_SCHEME_FOR_FILE) &&
- !uri.getSchemeSpecificPart().startsWith("/")) { // interpret URIs of this form as relative path uris
- url = new File(uri.getSchemeSpecificPart()).toURI().toURL();
+ !uri.getSchemeSpecificPart().startsWith("/")) { // interpret URIs of this form as relative path uris
+ uri = new File(uri.getSchemeSpecificPart()).toURI();
}
url = uri.toURL();
return url.openConnection().getInputStream();
}
- public static String accessUriAsString(String uri) throws IOException, URISyntaxException {
+ public static String accessUriAsString(final String uri) throws IOException, URISyntaxException {
return accessUriAsString(new URI(uri));
}
- public static String accessUriAsString(URI uri) throws IOException, URISyntaxException {
- InputStream stream = accessUri(uri);
+ public static String accessUriAsString(final URI uri) throws IOException, URISyntaxException {
+ final InputStream stream = accessUri(uri);
return new Scanner(stream).useDelimiter("\\A").next();
}
}
diff --git a/util/src/main/java/org/killbill/billing/util/config/PaymentConfig.java b/util/src/main/java/org/killbill/billing/util/config/PaymentConfig.java
index da7f219..1ab5c35 100644
--- a/util/src/main/java/org/killbill/billing/util/config/PaymentConfig.java
+++ b/util/src/main/java/org/killbill/billing/util/config/PaymentConfig.java
@@ -36,7 +36,7 @@ public interface PaymentConfig extends KillbillConfig {
@Description("Interval in days between payment retries")
public List<Integer> getPaymentRetryDays();
- @Config("orgkillbill.payment.failure.retry.start.sec")
+ @Config("org.killbill.payment.failure.retry.start.sec")
@Default("300")
public int getPluginFailureRetryStart();
diff --git a/util/src/main/java/org/killbill/billing/util/glue/SecurityModule.java b/util/src/main/java/org/killbill/billing/util/glue/SecurityModule.java
index 46482ab..7a352ba 100644
--- a/util/src/main/java/org/killbill/billing/util/glue/SecurityModule.java
+++ b/util/src/main/java/org/killbill/billing/util/glue/SecurityModule.java
@@ -18,7 +18,6 @@ package org.killbill.billing.util.glue;
import org.skife.config.ConfigSource;
import org.skife.config.ConfigurationObjectFactory;
-import org.skife.config.SimplePropertyConfigSource;
import org.killbill.billing.security.api.SecurityApi;
import org.killbill.billing.util.config.SecurityConfig;
@@ -32,10 +31,6 @@ public class SecurityModule extends AbstractModule {
private final ConfigSource configSource;
- public SecurityModule() {
- this(new SimplePropertyConfigSource(System.getProperties()));
- }
-
public SecurityModule(final ConfigSource configSource) {
this.configSource = configSource;
}
diff --git a/util/src/main/java/org/killbill/billing/util/KillbillConfigSource.java b/util/src/main/java/org/killbill/billing/util/KillbillConfigSource.java
new file mode 100644
index 0000000..8c04424
--- /dev/null
+++ b/util/src/main/java/org/killbill/billing/util/KillbillConfigSource.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2010-2013 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.killbill.billing.util;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.Properties;
+
+import org.killbill.billing.util.config.catalog.UriAccessor;
+import org.skife.config.ConfigSource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.annotations.VisibleForTesting;
+
+public class KillbillConfigSource implements ConfigSource {
+
+ private static final Logger logger = LoggerFactory.getLogger(KillbillConfigSource.class);
+ private static final String PROPERTIES_FILE = "org.killbill.server.properties";
+
+ private final Properties properties;
+
+ public KillbillConfigSource() {
+ this.properties = loadPropertiesFromFileOrSystemProperties();
+ populateDefaultProperties();
+ }
+
+ @VisibleForTesting
+ public KillbillConfigSource(final String file) throws URISyntaxException, IOException {
+ this.properties = new Properties();
+ this.properties.load(UriAccessor.accessUri(this.getClass().getResource(file).toURI()));
+ populateDefaultProperties();
+ }
+
+ @Override
+ public String getString(final String propertyName) {
+ return properties.getProperty(propertyName);
+ }
+
+ private Properties loadPropertiesFromFileOrSystemProperties() {
+ // Chicken-egg problem. It would be nice to have the property in e.g. KillbillServerConfig,
+ // but we need to build the ConfigSource first...
+ final String propertiesFileLocation = System.getProperty(PROPERTIES_FILE);
+ if (propertiesFileLocation != null) {
+ try {
+ // Ignore System Properties if we're loading from a file
+ final Properties properties = new Properties();
+ properties.load(UriAccessor.accessUri(propertiesFileLocation));
+ return properties;
+ } catch (final IOException e) {
+ logger.warn("Unable to access properties file, defaulting to system properties", e);
+ } catch (final URISyntaxException e) {
+ logger.warn("Unable to access properties file, defaulting to system properties", e);
+ }
+ }
+
+ return System.getProperties();
+ }
+
+ @VisibleForTesting
+ protected void populateDefaultProperties() {
+ final Properties defaultProperties = getDefaultProperties();
+ for (final String propertyName : defaultProperties.stringPropertyNames()) {
+ // Let the user override these properties
+ if (properties.get(propertyName) == null) {
+ properties.put(propertyName, defaultProperties.get(propertyName));
+ }
+ }
+
+ final Properties defaultSystemProperties = getDefaultSystemProperties();
+ for (final String propertyName : defaultSystemProperties.stringPropertyNames()) {
+ // Let the user override these properties
+ if (System.getProperty(propertyName) == null) {
+ System.setProperty(propertyName, defaultSystemProperties.get(propertyName).toString());
+ }
+ }
+ }
+
+ @VisibleForTesting
+ public void setProperty(final String propertyName, final Object propertyValue) {
+ properties.put(propertyName, propertyValue);
+ }
+
+ @VisibleForTesting
+ protected Properties getDefaultProperties() {
+ final Properties properties = new Properties();
+ properties.put("org.killbill.persistent.bus.external.tableName", "bus_ext_events");
+ properties.put("org.killbill.persistent.bus.external.historyTableName", "bus_ext_events_history");
+ return properties;
+ }
+
+ @VisibleForTesting
+ protected Properties getDefaultSystemProperties() {
+ final Properties properties = new Properties();
+ properties.put("user.timezone", "UTC");
+ properties.put("ANTLR_USE_DIRECT_CLASS_LOADING", "true");
+ return properties;
+ }
+}
diff --git a/util/src/test/java/org/killbill/billing/GuicyKillbillTestSuite.java b/util/src/test/java/org/killbill/billing/GuicyKillbillTestSuite.java
index d9ebc99..4eba0b3 100644
--- a/util/src/test/java/org/killbill/billing/GuicyKillbillTestSuite.java
+++ b/util/src/test/java/org/killbill/billing/GuicyKillbillTestSuite.java
@@ -20,19 +20,18 @@ import java.lang.reflect.Method;
import javax.inject.Inject;
+import org.killbill.billing.callcontext.InternalCallContext;
+import org.killbill.billing.util.KillbillConfigSource;
+import org.killbill.billing.util.callcontext.CallContext;
+import org.killbill.clock.ClockMock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.ITestResult;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
-import org.killbill.billing.util.callcontext.CallContext;
-import org.killbill.billing.callcontext.InternalCallContext;
-import org.killbill.clock.ClockMock;
-
public class GuicyKillbillTestSuite {
-
// Use the simple name here to save screen real estate
protected static final Logger log = LoggerFactory.getLogger(KillbillTestSuite.class.getSimpleName());
@@ -47,14 +46,22 @@ public class GuicyKillbillTestSuite {
@Inject
protected ClockMock clock;
-
private static final ClockMock theStaticClock = new ClockMock();
- protected final KillbillConfigSource configSource = new KillbillConfigSource();
+ protected final KillbillConfigSource configSource;
public GuicyKillbillTestSuite() {
- // Ignore ehcache checks. Unfortunately, ehcache looks at system properties directly...
- System.setProperty("net.sf.ehcache.skipUpdateCheck", "true");
+ try {
+ this.configSource = getConfigSource();
+ } catch (final Exception e) {
+ final AssertionError assertionError = new AssertionError("Initialization error");
+ assertionError.initCause(e);
+ throw assertionError;
+ }
+ }
+
+ protected KillbillConfigSource getConfigSource() throws Exception {
+ return new TestKillbillConfigSource();
}
public static ClockMock getClock() {
@@ -72,8 +79,8 @@ public class GuicyKillbillTestSuite {
public void afterMethodAlwaysRun(final Method method, final ITestResult result) throws Exception {
log.info("***************************************************************************************************");
log.info("*** Ending test {}:{} {} ({} s.)", new Object[]{method.getDeclaringClass().getName(), method.getName(),
- result.isSuccess() ? "SUCCESS" : "!!! FAILURE !!!",
- (result.getEndMillis() - result.getStartMillis()) / 1000});
+ result.isSuccess() ? "SUCCESS" : "!!! FAILURE !!!",
+ (result.getEndMillis() - result.getStartMillis()) / 1000});
log.info("***************************************************************************************************");
if (!hasFailed && !result.isSuccess()) {
hasFailed = true;
diff --git a/util/src/test/java/org/killbill/billing/TestKillbillConfigSource.java b/util/src/test/java/org/killbill/billing/TestKillbillConfigSource.java
new file mode 100644
index 0000000..08a24d1
--- /dev/null
+++ b/util/src/test/java/org/killbill/billing/TestKillbillConfigSource.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2010-2014 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 org.killbill.billing;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.Map;
+import java.util.Properties;
+
+import org.killbill.billing.util.KillbillConfigSource;
+
+import com.google.common.collect.ImmutableMap;
+
+public class TestKillbillConfigSource extends KillbillConfigSource {
+
+ private final Map<String, String> extraDefaults;
+
+ public TestKillbillConfigSource() {
+ super();
+ this.extraDefaults = ImmutableMap.<String, String>of();
+ }
+
+ public TestKillbillConfigSource(final String file) throws URISyntaxException, IOException {
+ this(file, ImmutableMap.<String, String>of());
+ }
+
+ public TestKillbillConfigSource(final String file, final Map<String, String> extraDefaults) throws URISyntaxException, IOException {
+ super(file);
+ this.extraDefaults = extraDefaults;
+ // extraDefaults changed, need to reload defaults
+ populateDefaultProperties();
+ }
+
+ @Override
+ protected Properties getDefaultProperties() {
+ final Properties properties = super.getDefaultProperties();
+
+ // Setup up DAO properties (this will be a no-op for fast tests)
+ properties.put("org.killbill.dao.url", DBTestingHelper.get().getJdbcConnectionString());
+ properties.put("org.killbill.dao.user", DBTestingHelper.get().getUsername());
+ properties.put("org.killbill.dao.password", DBTestingHelper.get().getPassword());
+ properties.put("org.killbill.billing.osgi.jdbc.url", DBTestingHelper.get().getJdbcConnectionString());
+ properties.put("org.killbill.billing.osgi.jdbc.user", DBTestingHelper.get().getUsername());
+ properties.put("org.killbill.billing.osgi.jdbc.password", DBTestingHelper.get().getPassword());
+
+ // Speed up the notification queue
+ properties.put("org.killbill.notificationq.main.sleep", "100");
+ properties.put("org.killbill.notificationq.main.nbThreads", "1");
+ properties.put("org.killbill.notificationq.main.prefetch", "1");
+ properties.put("org.killbill.notificationq.main.claimed", "1");
+ properties.put("org.killbill.notificationq.main.useInFlightQ", "false");
+ // Speed up the buses
+ properties.put("org.killbill.persistent.bus.main.sleep", "100");
+ properties.put("org.killbill.persistent.bus.main.nbThreads", "1");
+ properties.put("org.killbill.persistent.bus.main.prefetch", "1");
+ properties.put("org.killbill.persistent.bus.main.claimed", "1");
+ properties.put("org.killbill.persistent.bus.main.useInFlightQ", "false");
+ properties.put("org.killbill.persistent.bus.external.sleep", "100");
+ properties.put("org.killbill.persistent.bus.external.nbThreads", "1");
+ properties.put("org.killbill.persistent.bus.external.prefetch", "1");
+ properties.put("org.killbill.persistent.bus.external.claimed", "1");
+ properties.put("org.killbill.persistent.bus.external.useInFlightQ", "false");
+
+ if (extraDefaults != null) {
+ for (final String key : extraDefaults.keySet()) {
+ properties.put(key, extraDefaults.get(key));
+ }
+ }
+
+ return properties;
+ }
+
+ @Override
+ protected Properties getDefaultSystemProperties() {
+ final Properties properties = super.getDefaultSystemProperties();
+ properties.put("net.sf.ehcache.skipUpdateCheck", "true");
+ properties.put("org.slf4j.simpleLogger.showDateTime", "true");
+ return properties;
+ }
+}
diff --git a/util/src/test/java/org/killbill/billing/util/email/EmailSenderTest.java b/util/src/test/java/org/killbill/billing/util/email/EmailSenderTest.java
index f73094b..d706daa 100644
--- a/util/src/test/java/org/killbill/billing/util/email/EmailSenderTest.java
+++ b/util/src/test/java/org/killbill/billing/util/email/EmailSenderTest.java
@@ -17,12 +17,11 @@ package org.killbill.billing.util.email;/*
import java.util.ArrayList;
import java.util.List;
+import org.killbill.billing.util.UtilTestSuiteNoDB;
import org.skife.config.ConfigurationObjectFactory;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
-import org.killbill.billing.util.UtilTestSuiteNoDB;
-
@Test(groups = "slow")
public class EmailSenderTest extends UtilTestSuiteNoDB {
@@ -31,7 +30,7 @@ public class EmailSenderTest extends UtilTestSuiteNoDB {
@BeforeClass
public void beforeClass() throws Exception {
super.beforeClass();
- config = new ConfigurationObjectFactory(System.getProperties()).build(EmailConfig.class);
+ config = new ConfigurationObjectFactory(configSource).build(EmailConfig.class);
}
@Test(enabled = false)
diff --git a/util/src/test/java/org/killbill/billing/util/glue/TestUtilModuleNoDB.java b/util/src/test/java/org/killbill/billing/util/glue/TestUtilModuleNoDB.java
index 7d6852d..adb872f 100644
--- a/util/src/test/java/org/killbill/billing/util/glue/TestUtilModuleNoDB.java
+++ b/util/src/test/java/org/killbill/billing/util/glue/TestUtilModuleNoDB.java
@@ -53,6 +53,6 @@ public class TestUtilModuleNoDB extends TestUtilModule {
install(new KillBillShiroModule(configSource));
install(new KillBillShiroAopModule());
- install(new SecurityModule());
+ install(new SecurityModule(configSource));
}
}
diff --git a/util/src/test/java/org/killbill/billing/util/security/TestPermissionAnnotationMethodInterceptor.java b/util/src/test/java/org/killbill/billing/util/security/TestPermissionAnnotationMethodInterceptor.java
index 889a7a6..60461c9 100644
--- a/util/src/test/java/org/killbill/billing/util/security/TestPermissionAnnotationMethodInterceptor.java
+++ b/util/src/test/java/org/killbill/billing/util/security/TestPermissionAnnotationMethodInterceptor.java
@@ -76,7 +76,7 @@ public class TestPermissionAnnotationMethodInterceptor extends UtilTestSuiteNoDB
final Injector injector = Guice.createInjector(Stage.PRODUCTION,
new KillBillShiroModule(configSource),
new KillBillShiroAopModule(),
- new SecurityModule(),
+ new SecurityModule(configSource),
new AbstractModule() {
@Override
protected void configure() {
@@ -104,7 +104,7 @@ public class TestPermissionAnnotationMethodInterceptor extends UtilTestSuiteNoDB
final Injector injector = Guice.createInjector(Stage.PRODUCTION,
new KillBillShiroModule(configSource),
new KillBillShiroAopModule(),
- new SecurityModule(),
+ new SecurityModule(configSource),
new AbstractModule() {
@Override
public void configure() {