killbill-memoizeit
Changes
entitlement/src/main/java/com/ning/billing/entitlement/engine/core/ApiEventProcessorBase.java 18(+17 -1)
Details
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java b/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java
index 7717796..e208852 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java
@@ -44,13 +44,13 @@ public class MockSubscription implements ISubscription
}
@Override
- public void cancel()
+ public void cancel(DateTime requestedDate, boolean eot)
{
throw new UnsupportedOperationException();
}
@Override
- public void changePlan(final String productName, final BillingPeriod term, final String planSet)
+ public void changePlan(final String productName, final BillingPeriod term, final String planSet, DateTime requestedDate)
{
throw new UnsupportedOperationException();
}
diff --git a/api/src/main/java/com/ning/billing/config/IEntitlementConfig.java b/api/src/main/java/com/ning/billing/config/IEntitlementConfig.java
index 0cb228b..167e1e5 100644
--- a/api/src/main/java/com/ning/billing/config/IEntitlementConfig.java
+++ b/api/src/main/java/com/ning/billing/config/IEntitlementConfig.java
@@ -26,14 +26,14 @@ public interface IEntitlementConfig {
public long getDaoClaimTimeMs();
@Config("killbill.entitlement.dao.ready.max")
- @Default("1")
+ @Default("10")
public int getDaoMaxReadyEvents();
- @Config("killbill.entitlement.catalog.config.file")
- @Default("hum, not sure")
- public String getCatalogConfigFileName();
-
@Config("killbill.entitlement.engine.notifications.sleep")
@Default("500")
public long getNotificationSleepTimeMs();
+
+ @Config("killbill.entitlement.engine.events.off")
+ @Default("false")
+ public boolean isEventProcessingOff();
}
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/IEntitlementService.java b/api/src/main/java/com/ning/billing/entitlement/api/IEntitlementService.java
index 41cd37d..ddcdf0c 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/IEntitlementService.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/IEntitlementService.java
@@ -19,6 +19,7 @@ package com.ning.billing.entitlement.api;
import java.util.List;
import com.ning.billing.entitlement.api.billing.IEntitlementBillingApi;
+import com.ning.billing.entitlement.api.test.IEntitlementTestApi;
import com.ning.billing.entitlement.api.user.IApiListener;
import com.ning.billing.entitlement.api.user.IEntitlementUserApi;
import com.ning.billing.lifecycle.IService;
@@ -33,4 +34,7 @@ public interface IEntitlementService extends IService {
public IEntitlementBillingApi getBillingApi();
+ public IEntitlementTestApi getTestApi();
+
+
}
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/test/IEntitlementTestApi.java b/api/src/main/java/com/ning/billing/entitlement/api/test/IEntitlementTestApi.java
new file mode 100644
index 0000000..fbaa68e
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/entitlement/api/test/IEntitlementTestApi.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.entitlement.api.test;
+
+public interface IEntitlementTestApi {
+
+ public void doProcessReadyEvents();
+
+}
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/user/IEntitlementUserApi.java b/api/src/main/java/com/ning/billing/entitlement/api/user/IEntitlementUserApi.java
index fb21eea..c3f79dc 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/user/IEntitlementUserApi.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/user/IEntitlementUserApi.java
@@ -19,6 +19,8 @@ package com.ning.billing.entitlement.api.user;
import java.util.List;
import java.util.UUID;
+import org.joda.time.DateTime;
+
import com.ning.billing.account.api.IAccount;
import com.ning.billing.catalog.api.BillingPeriod;
@@ -38,6 +40,6 @@ public interface IEntitlementUserApi {
public ISubscriptionBundle createBundleForAccount(IAccount account, String bundleKey)
throws EntitlementUserApiException;
- public ISubscription createSubscription(UUID bundleId, String productName, BillingPeriod term, String planSet)
+ public ISubscription createSubscription(UUID bundleId, String productName, BillingPeriod term, String planSet, DateTime requestedDate)
throws EntitlementUserApiException;
}
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/user/ISubscription.java b/api/src/main/java/com/ning/billing/entitlement/api/user/ISubscription.java
index 4795655..574de30 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/user/ISubscription.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/user/ISubscription.java
@@ -29,13 +29,13 @@ import com.ning.billing.catalog.api.ActionPolicy;
public interface ISubscription extends IPrivateFields {
- public void cancel()
+ public void cancel(DateTime requestedDate, boolean eot)
throws EntitlementUserApiException;
public void uncancel()
throws EntitlementUserApiException;
- public void changePlan(String productName, BillingPeriod term, String planSet)
+ public void changePlan(String productName, BillingPeriod term, String planSet, DateTime requestedDate)
throws EntitlementUserApiException ;
public void pause()
diff --git a/api/src/main/java/com/ning/billing/ErrorCode.java b/api/src/main/java/com/ning/billing/ErrorCode.java
index d89ff97..24ee8c7 100644
--- a/api/src/main/java/com/ning/billing/ErrorCode.java
+++ b/api/src/main/java/com/ning/billing/ErrorCode.java
@@ -28,7 +28,8 @@ public enum ErrorCode {
* Range 1000 : ENTITLEMENTS
*
*/
- /* Not yet */
+ /* Generic through APIs */
+ ENT_INVALID_REQUESTED_DATE(1001, "Requested in the future is not allowed : %s"),
/* Creation */
ENT_CREATE_BAD_CATALOG(1011, "Plan for product %s, term %s and set %s does not exist in the catalog"),
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/test/EntitlementTestApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/test/EntitlementTestApi.java
new file mode 100644
index 0000000..8ba459e
--- /dev/null
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/test/EntitlementTestApi.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.entitlement.api.test;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.ning.billing.config.IEntitlementConfig;
+import com.ning.billing.entitlement.engine.core.IApiEventProcessor;
+
+public class EntitlementTestApi implements IEntitlementTestApi {
+
+ private final static Logger log = LoggerFactory.getLogger(EntitlementTestApi.class);
+
+ private final IApiEventProcessor apiEventProcessor;
+ private final IEntitlementConfig config;
+
+ public EntitlementTestApi(IApiEventProcessor apiEventProcessor, IEntitlementConfig config) {
+ this.apiEventProcessor = apiEventProcessor;
+ this.config = config;
+ }
+
+ @Override
+ public void doProcessReadyEvents() {
+ if (config.isEventProcessingOff()) {
+ log.warn("Running event processing loop");
+ apiEventProcessor.processAllReadyEvents();
+ }
+ }
+}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java
index 2173e0a..19f2ec8 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java
@@ -100,12 +100,17 @@ public class EntitlementUserApi implements IEntitlementUserApi {
@Override
public ISubscription createSubscription(UUID bundleId, String productName,
- BillingPeriod term, String priceList) throws EntitlementUserApiException {
+ BillingPeriod term, String priceList, DateTime requestedDate) throws EntitlementUserApiException {
// STEPH Should really get 'standard' from catalog
String realPriceList = (priceList == null) ? IPriceListSet.DEFAULT_PRICELIST_NAME : priceList;
DateTime now = clock.getUTCNow();
+ if (requestedDate != null && requestedDate.isAfter(now)) {
+ throw new EntitlementUserApiException(ErrorCode.ENT_INVALID_REQUESTED_DATE, requestedDate.toString());
+ }
+
+ requestedDate = (requestedDate == null) ? now : requestedDate;
IPlan plan = catalog.getPlan(productName, term, realPriceList);
if (plan == null) {
@@ -132,7 +137,7 @@ public class EntitlementUserApi implements IEntitlementUserApi {
if (baseSubscription != null) {
throw new EntitlementUserApiException(ErrorCode.ENT_CREATE_BP_EXISTS, bundleId);
}
- bundleStartDate = now;
+ bundleStartDate = requestedDate;
break;
case ADD_ON:
if (baseSubscription == null) {
@@ -145,14 +150,14 @@ public class EntitlementUserApi implements IEntitlementUserApi {
plan.getProduct().getCategory().toString()));
}
- DateTime effectiveDate = now;
-
+ DateTime effectiveDate = requestedDate;
Subscription subscription = new Subscription(bundleId, plan.getProduct().getCategory(), bundleStartDate, effectiveDate);
TimedPhase currentTimedPhase = planAligner.getCurrentTimedPhaseOnCreate(subscription, plan, realPriceList, effectiveDate);
ApiEventCreate creationEvent =
new ApiEventCreate(subscription.getId(), bundleStartDate, now, plan.getName(), currentTimedPhase.getPhase().getName(), realPriceList,
- now, effectiveDate, subscription.getActiveVersion());
+ requestedDate, effectiveDate, subscription.getActiveVersion());
+
TimedPhase nextTimedPhase = planAligner.getNextTimedPhaseOnCreate(subscription, plan, realPriceList, effectiveDate);
IPhaseEvent nextPhaseEvent = PhaseEvent.getNextPhaseEvent(nextTimedPhase, subscription, now);
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
index a5cd11e..2c04998 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
@@ -206,7 +206,7 @@ public class Subscription extends PrivateFields implements ISubscription {
@Override
- public void cancel() throws EntitlementUserApiException {
+ public void cancel(DateTime requestedDate, boolean eot) throws EntitlementUserApiException {
SubscriptionState currentState = getState();
if (currentState != SubscriptionState.ACTIVE) {
@@ -214,6 +214,9 @@ public class Subscription extends PrivateFields implements ISubscription {
}
DateTime now = clock.getUTCNow();
+ if (requestedDate != null && requestedDate.isAfter(now)) {
+ throw new EntitlementUserApiException(ErrorCode.ENT_INVALID_REQUESTED_DATE, requestedDate.toString());
+ }
IPlan currentPlan = getCurrentPlan();
PlanPhaseSpecifier planPhase = new PlanPhaseSpecifier(currentPlan.getProduct().getName(),
@@ -251,7 +254,7 @@ public class Subscription extends PrivateFields implements ISubscription {
@Override
public void changePlan(String productName, BillingPeriod term,
- String priceList) throws EntitlementUserApiException {
+ String priceList, DateTime requestedDate) throws EntitlementUserApiException {
String currentPriceList = getCurrentPriceList();
String realPriceList = (priceList == null) ? currentPriceList : priceList;
@@ -399,22 +402,6 @@ public class Subscription extends PrivateFields implements ISubscription {
return false;
}
- // STEPH do we need that? forgot?
- private boolean isSubscriptionFutureChanged() {
- if (transitions == null) {
- return false;
- }
-
- for (SubscriptionTransition cur : transitions) {
- if (cur.getEffectiveTransitionTime().isBefore(clock.getUTCNow()) ||
- cur.getEventType() == EventType.PHASE ||
- cur.getApiEventType() != ApiEventType.CHANGE) {
- continue;
- }
- return true;
- }
- return false;
- }
private DateTime getPlanChangeEffectiveDate(ActionPolicy policy, DateTime now) {
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/ApiEventProcessor.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/ApiEventProcessor.java
index 9389969..541de37 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/ApiEventProcessor.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/ApiEventProcessor.java
@@ -33,11 +33,11 @@ public class ApiEventProcessor extends ApiEventProcessorBase {
@Override
- protected void doProcessEvents(int sequenceId) {
+ protected boolean doProcessEvents(int sequenceId) {
long prev = nbProcessedEvents;
List<IEvent> claimedEvents = dao.getEventsReady(apiProcessorId, sequenceId);
if (claimedEvents.size() == 0) {
- return;
+ return false;
}
log.debug(String.format("ApiEventProcessor got %d events", claimedEvents.size()));
@@ -51,6 +51,7 @@ public class ApiEventProcessor extends ApiEventProcessorBase {
dao.clearEventsReady(apiProcessorId, claimedEvents);
log.debug(String.format("ApiEventProcessor cleared events %d", nbProcessedEvents - prev));
//log.debug(String.format("ApiEventProcessor seq = %d cleared events %s", sequenceId, claimedEvents.get(0).getId()));
+ return true;
}
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/ApiEventProcessorBase.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/ApiEventProcessorBase.java
index cf20530..c4e01dd 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/ApiEventProcessorBase.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/ApiEventProcessorBase.java
@@ -166,5 +166,21 @@ public abstract class ApiEventProcessorBase implements IApiEventProcessor {
}
}
- protected abstract void doProcessEvents(int sequenceId);
+
+ // Used for system test purpose only when event processing has been disabled.
+ @Override
+ public void processAllReadyEvents() {
+
+
+ boolean keepProcessing = false;
+ /*
+ do {
+ */
+ keepProcessing = doProcessEvents(sequenceId.incrementAndGet());
+ /*
+ } while (keepProcessing);
+ */
+ }
+
+ protected abstract boolean doProcessEvents(int sequenceId);
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
index dd33ae5..4f4d7e7 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
@@ -33,6 +33,8 @@ import com.ning.billing.entitlement.alignment.PlanAligner;
import com.ning.billing.entitlement.api.IEntitlementService;
import com.ning.billing.entitlement.api.billing.BillingApi;
import com.ning.billing.entitlement.api.billing.IEntitlementBillingApi;
+import com.ning.billing.entitlement.api.test.EntitlementTestApi;
+import com.ning.billing.entitlement.api.test.IEntitlementTestApi;
import com.ning.billing.entitlement.api.user.EntitlementUserApi;
import com.ning.billing.entitlement.api.user.IApiListener;
import com.ning.billing.entitlement.api.user.IEntitlementUserApi;
@@ -43,6 +45,7 @@ import com.ning.billing.entitlement.events.IEvent.EventType;
import com.ning.billing.entitlement.events.phase.IPhaseEvent;
import com.ning.billing.entitlement.events.phase.PhaseEvent;
import com.ning.billing.entitlement.events.user.IUserEvent;
+import com.ning.billing.lifecycle.IService;
import com.ning.billing.lifecycle.LyfecycleHandlerType;
import com.ning.billing.lifecycle.LyfecycleHandlerType.LyfecycleLevel;
import com.ning.billing.util.clock.IClock;
@@ -59,6 +62,8 @@ public class Engine implements IEventListener, IEntitlementService {
private final IPlanAligner planAligner;
private final IEntitlementUserApi userApi;
private final IEntitlementBillingApi billingApi;
+ private final IEntitlementTestApi testApi;
+ private final IEntitlementConfig config;
private List<IApiListener> observers;
@@ -70,9 +75,12 @@ public class Engine implements IEventListener, IEntitlementService {
this.dao = dao;
this.apiEventProcessor = apiEventProcessor;
this.planAligner = planAligner;
+ this.config = config;
this.observers = null;
this.userApi = new EntitlementUserApi(this, clock, planAligner, dao);
this.billingApi = new BillingApi(this, clock, dao);
+ this.testApi = new EntitlementTestApi(apiEventProcessor, config);
+
}
@Override
@@ -87,6 +95,10 @@ public class Engine implements IEventListener, IEntitlementService {
@LyfecycleHandlerType(LyfecycleLevel.START_SERVICE)
public void start() {
+ if (config.isEventProcessingOff()) {
+ log.warn("KILLBILL ENTITLEMENT EVENT PROCESSING IS OFF !!!");
+ return;
+ }
apiEventProcessor.startNotifications(this);
}
@@ -107,6 +119,11 @@ public class Engine implements IEventListener, IEntitlementService {
}
+ @Override
+ public IEntitlementTestApi getTestApi() {
+ return testApi;
+ }
+
public void registerApiObservers(List<IApiListener> observers) {
this.observers = observers;
}
@@ -165,4 +182,5 @@ public class Engine implements IEventListener, IEntitlementService {
dao.createNextPhaseEvent(subscription.getId(), nextPhaseEvent);
}
}
+
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/IApiEventProcessor.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/IApiEventProcessor.java
index 2f43320..f51ae7e 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/IApiEventProcessor.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/IApiEventProcessor.java
@@ -19,4 +19,6 @@ package com.ning.billing.entitlement.engine.core;
public interface IApiEventProcessor extends IEventNotifier {
+ public void processAllReadyEvents();
+
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
index 4c2ae2b..0ee8570 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
@@ -201,7 +201,7 @@ public abstract class TestUserApiBase {
protected Subscription createSubscription(String productName, BillingPeriod term, String planSet) throws EntitlementUserApiException {
testListener.pushExpectedEvent(NextEvent.CREATE);
- Subscription subscription = (Subscription) entitlementApi.createSubscription(bundle.getId(), productName, term, planSet);
+ Subscription subscription = (Subscription) entitlementApi.createSubscription(bundle.getId(), productName, term, planSet, clock.getUTCNow());
assertNotNull(subscription);
assertTrue(testListener.isCompleted(5000));
return subscription;
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancel.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancel.java
index 68f64ab..6a8dee2 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancel.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancel.java
@@ -62,7 +62,7 @@ public abstract class TestUserApiCancel extends TestUserApiBase {
testListener.pushExpectedEvent(NextEvent.CANCEL);
// CANCEL in trial period to get IMM policy
- subscription.cancel();
+ subscription.cancel(clock.getUTCNow(), false);
currentPhase = subscription.getCurrentPhase();
testListener.isCompleted(1000);
@@ -113,7 +113,7 @@ public abstract class TestUserApiCancel extends TestUserApiBase {
testListener.pushExpectedEvent(NextEvent.CANCEL);
// CANCEL
- subscription.cancel();
+ subscription.cancel(clock.getUTCNow(), false);
assertFalse(testListener.isCompleted(2000));
// MOVE TO EOT + RECHECK
@@ -160,7 +160,7 @@ public abstract class TestUserApiCancel extends TestUserApiBase {
testListener.pushExpectedEvent(NextEvent.CANCEL);
// CANCEL
- subscription.cancel();
+ subscription.cancel(clock.getUTCNow(), false);
assertTrue(testListener.isCompleted(2000));
IPlanPhase currentPhase = subscription.getCurrentPhase();
@@ -210,7 +210,7 @@ public abstract class TestUserApiCancel extends TestUserApiBase {
testListener.pushExpectedEvent(NextEvent.CANCEL);
// CANCEL
- subscription.cancel();
+ subscription.cancel(clock.getUTCNow(), false);
assertFalse(testListener.isCompleted(2000));
subscription.uncancel();
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlan.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlan.java
index fae1a55..373db87 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlan.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlan.java
@@ -85,7 +85,7 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
// CHANGE PLAN
testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription.changePlan(toProd, toTerm, toPlanSet);
+ subscription.changePlan(toProd, toTerm, toPlanSet, clock.getUTCNow());
assertTrue(testListener.isCompleted(2000));
// CHECK CHANGE PLAN
@@ -131,7 +131,7 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
// RE READ SUBSCRIPTION + CHANGE PLAN
testListener.pushExpectedEvent(NextEvent.CHANGE);
subscription = (Subscription) entitlementApi.getSubscriptionFromId(subscription.getId());
- subscription.changePlan(toProd, toTerm, toPlanSet);
+ subscription.changePlan(toProd, toTerm, toPlanSet, clock.getUTCNow());
assertFalse(testListener.isCompleted(2000));
testListener.reset();
@@ -183,7 +183,7 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
clock.setDeltaFromReality(moveALittleInTime, 0);
// CHANGE PLAN IMM
- subscription.changePlan(toProd, toTerm, toPlanSet);
+ subscription.changePlan(toProd, toTerm, toPlanSet, clock.getUTCNow());
checkChangePlan(subscription, toProd, ProductCategory.BASE, toTerm, PhaseType.TRIAL);
assertTrue(testListener.isCompleted(2000));
@@ -245,7 +245,7 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
currentTime = clock.getUTCNow();
testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription.changePlan(toProd, toTerm, toPlanSet);
+ subscription.changePlan(toProd, toTerm, toPlanSet, clock.getUTCNow());
checkChangePlan(subscription, fromProd, ProductCategory.BASE, fromTerm, PhaseType.EVERGREEN);
@@ -310,12 +310,12 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
// CHANGE EOT
testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription.changePlan("Pistol", BillingPeriod.MONTHLY, "gunclubDiscount");
+ subscription.changePlan("Pistol", BillingPeriod.MONTHLY, "gunclubDiscount", clock.getUTCNow());
assertFalse(testListener.isCompleted(2000));
// CHANGE
testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription.changePlan("Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount");
+ subscription.changePlan("Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount", clock.getUTCNow());
assertFalse(testListener.isCompleted(2000));
IPlan currentPlan = subscription.getCurrentPlan();
@@ -357,13 +357,13 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
// CHANGE EOT
testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription.changePlan("Shotgun", BillingPeriod.MONTHLY, "gunclubDiscount");
+ subscription.changePlan("Shotgun", BillingPeriod.MONTHLY, "gunclubDiscount", clock.getUTCNow());
assertFalse(testListener.isCompleted(2000));
testListener.reset();
// CHANGE EOT
testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription.changePlan("Pistol", BillingPeriod.ANNUAL, "gunclubDiscount");
+ subscription.changePlan("Pistol", BillingPeriod.ANNUAL, "gunclubDiscount", clock.getUTCNow());
assertFalse(testListener.isCompleted(2000));
testListener.reset();
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreate.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreate.java
index 620fc4b..64f69c3 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreate.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreate.java
@@ -52,7 +52,7 @@ public abstract class TestUserApiCreate extends TestUserApiBase {
testListener.pushExpectedEvent(NextEvent.CREATE);
- Subscription subscription = (Subscription) entitlementApi.createSubscription(bundle.getId(), productName, term, planSetName);
+ Subscription subscription = (Subscription) entitlementApi.createSubscription(bundle.getId(), productName, term, planSetName, clock.getUTCNow());
assertNotNull(subscription);
assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
@@ -117,7 +117,7 @@ public abstract class TestUserApiCreate extends TestUserApiBase {
testListener.pushExpectedEvent(NextEvent.CREATE);
// CREATE SUBSCRIPTION
- Subscription subscription = (Subscription) entitlementApi.createSubscription(bundle.getId(), productName, term, planSetName);
+ Subscription subscription = (Subscription) entitlementApi.createSubscription(bundle.getId(), productName, term, planSetName, clock.getUTCNow());
assertNotNull(subscription);
IPlanPhase currentPhase = subscription.getCurrentPhase();
@@ -164,7 +164,7 @@ public abstract class TestUserApiCreate extends TestUserApiBase {
testListener.pushExpectedEvent(NextEvent.CREATE);
- Subscription subscription = (Subscription) entitlementApi.createSubscription(bundle.getId(), productName, term, planSetName);
+ Subscription subscription = (Subscription) entitlementApi.createSubscription(bundle.getId(), productName, term, planSetName, clock.getUTCNow());
assertNotNull(subscription);
} catch (EntitlementUserApiException e) {
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiDemos.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiDemos.java
index 3fb58ee..90e7cde 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiDemos.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiDemos.java
@@ -80,7 +80,7 @@ public class TestUserApiDemos extends TestUserApiBase {
/* STEP 2. CHANGE PLAN WHILE IN TRIAL */
testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription.changePlan("Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount");
+ subscription.changePlan("Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount", clock.getUTCNow());
assertTrue(testListener.isCompleted(3000));
displayState(subscription.getId(), "STEP 2. CHANGED PLAN WHILE IN TRIAL");
@@ -103,7 +103,7 @@ public class TestUserApiDemos extends TestUserApiBase {
subscription = (Subscription) entitlementApi.getSubscriptionFromId(subscription.getId());
testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription.changePlan("Shotgun", BillingPeriod.ANNUAL, "gunclubDiscount");
+ subscription.changePlan("Shotgun", BillingPeriod.ANNUAL, "gunclubDiscount", clock.getUTCNow());
assertFalse(testListener.isCompleted(2000));
testListener.reset();
@@ -111,7 +111,7 @@ public class TestUserApiDemos extends TestUserApiBase {
/* STEP 5. CHANGE AGAIN */
testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription.changePlan("Pistol", BillingPeriod.ANNUAL, "gunclubDiscount");
+ subscription.changePlan("Pistol", BillingPeriod.ANNUAL, "gunclubDiscount", clock.getUTCNow());
assertFalse(testListener.isCompleted(2000));
testListener.reset();
@@ -154,7 +154,7 @@ public class TestUserApiDemos extends TestUserApiBase {
/* STEP 8. CANCEL IMM (NO CTD) */
testListener.pushExpectedEvent(NextEvent.CANCEL);
- subscription.cancel();
+ subscription.cancel(clock.getUTCNow(), false);
displayState(subscription.getId(), "STEP 8. CANCELLATION");
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiError.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiError.java
index f247e42..520ddbe 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiError.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiError.java
@@ -92,7 +92,7 @@ public class TestUserApiError extends TestUserApiBase {
private void tCreateSubscriptionInternal(UUID bundleId, String productName,
BillingPeriod term, String planSet, ErrorCode expected) {
try {
- entitlementApi.createSubscription(bundleId, productName, term, planSet);
+ entitlementApi.createSubscription(bundleId, productName, term, planSet,clock.getUTCNow());
assertFalse(true);
} catch (EntitlementUserApiException e) {
assertEquals(e.getCode(), expected.getCode());
@@ -111,9 +111,9 @@ public class TestUserApiError extends TestUserApiBase {
ISubscription subscription = createSubscription("Shotgun", BillingPeriod.ANNUAL, IPriceListSet.DEFAULT_PRICELIST_NAME);
testListener.pushExpectedEvent(NextEvent.CANCEL);
- subscription.cancel();
+ subscription.cancel(clock.getUTCNow(), false);
try {
- subscription.changePlan("Pistol", BillingPeriod.MONTHLY, IPriceListSet.DEFAULT_PRICELIST_NAME);
+ subscription.changePlan("Pistol", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, clock.getUTCNow());
} catch (EntitlementUserApiException e) {
assertEquals(e.getCode(), ErrorCode.ENT_CHANGE_NON_ACTIVE.getCode());
try {
@@ -142,9 +142,9 @@ public class TestUserApiError extends TestUserApiBase {
billingApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate);
subscription = entitlementApi.getSubscriptionFromId(subscription.getId());
- subscription.cancel();
+ subscription.cancel(clock.getUTCNow(), false);
try {
- subscription.changePlan("Pistol", BillingPeriod.MONTHLY, IPriceListSet.DEFAULT_PRICELIST_NAME);
+ subscription.changePlan("Pistol", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, clock.getUTCNow());
} catch (EntitlementUserApiException e) {
assertEquals(e.getCode(), ErrorCode.ENT_CHANGE_FUTURE_CANCELLED.getCode());
try {
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiScenarios.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiScenarios.java
index 7f3dbba..78e7cb3 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiScenarios.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiScenarios.java
@@ -53,7 +53,7 @@ public class TestUserApiScenarios extends TestUserApiBase {
assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription.changePlan("Pistol", BillingPeriod.ANNUAL, "gunclubDiscount");
+ subscription.changePlan("Pistol", BillingPeriod.ANNUAL, "gunclubDiscount", clock.getUTCNow());
testListener.isCompleted(3000);
// MOVE TO NEXT PHASE
@@ -70,7 +70,7 @@ public class TestUserApiScenarios extends TestUserApiBase {
// CANCEL EOT
testListener.pushExpectedEvent(NextEvent.CANCEL);
- subscription.cancel();
+ subscription.cancel(clock.getUTCNow(), false);
assertFalse(testListener.isCompleted(2000));
testListener.reset();
@@ -79,7 +79,7 @@ public class TestUserApiScenarios extends TestUserApiBase {
// CHANGE EOT
testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription.changePlan("Pistol", BillingPeriod.MONTHLY, "gunclubDiscount");
+ subscription.changePlan("Pistol", BillingPeriod.MONTHLY, "gunclubDiscount", clock.getUTCNow());
assertFalse(testListener.isCompleted(2000));
clock.addDeltaFromReality(ctd);
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/engine/core/ApiEventProcessorMemoryMock.java b/entitlement/src/test/java/com/ning/billing/entitlement/engine/core/ApiEventProcessorMemoryMock.java
index 38aed83..79aef55 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/engine/core/ApiEventProcessorMemoryMock.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/engine/core/ApiEventProcessorMemoryMock.java
@@ -34,9 +34,12 @@ public class ApiEventProcessorMemoryMock extends ApiEventProcessorBase {
@Override
- protected void doProcessEvents(int sequenceId) {
+ protected boolean doProcessEvents(int sequenceId) {
List<IEvent> events = dao.getEventsReady(apiProcessorId, sequenceId);
+ if (events.size() == 0) {
+ return false;
+ }
log.info(String.format("doProcessEvents : Got %d event(s)", events.size() ));
for (IEvent cur : events) {
log.info(String.format("doProcessEvents : (clock = %s) CALLING Engine with event %s", clock.getUTCNow(), cur));
@@ -46,5 +49,6 @@ public class ApiEventProcessorMemoryMock extends ApiEventProcessorBase {
}
dao.clearEventsReady(apiProcessorId, events);
log.info(String.format("doProcessEvents : clearEvents"));
+ return true;
}
}