killbill-uncached
Changes
entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionEvent.java 19(+19 -0)
Details
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionEvent.java b/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionEvent.java
index 8dc3312..2745c33 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionEvent.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionEvent.java
@@ -65,4 +65,5 @@ public interface SubscriptionEvent extends BusEvent {
Integer getRemainingEventsForUserOperation();
Long getTotalOrdering();
+
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionEvent.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionEvent.java
index ea310f9..3cf74ec 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionEvent.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionEvent.java
@@ -348,5 +348,24 @@ public class DefaultSubscriptionEvent implements SubscriptionEvent {
return false;
return true;
}
+
+ @Override
+ public String toString() {
+ return "DefaultSubscriptionEvent [transitionType=" + transitionType
+ + ", effectiveTransitionTime=" + effectiveTransitionTime
+ + ", totalOrdering=" + totalOrdering
+ + ", subscriptionId=" + subscriptionId + ", bundleId="
+ + bundleId + ", eventId=" + eventId
+ + ", requestedTransitionTime=" + requestedTransitionTime
+ + ", previousState=" + previousState + ", previousPriceList="
+ + previousPriceList + ", previousPlan=" + previousPlan
+ + ", previousPhase=" + previousPhase + ", nextState="
+ + nextState + ", nextPriceList=" + nextPriceList
+ + ", nextPlan=" + nextPlan + ", nextPhase=" + nextPhase
+ + ", remainingEventsForUserOperation="
+ + remainingEventsForUserOperation + ", userToken=" + userToken
+ + ", startDate=" + startDate + "]";
+
+ }
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestApiBase.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestApiBase.java
index 42f85ea..7623fbb 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestApiBase.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestApiBase.java
@@ -270,8 +270,8 @@ public abstract class TestApiBase implements TestListenerStatus {
protected SubscriptionData createSubscriptionWithBundle(final UUID bundleId, final String productName, final BillingPeriod term, final String planSet, final DateTime requestedDate)
throws EntitlementUserApiException {
+
testListener.pushExpectedEvent(NextEvent.CREATE);
-
SubscriptionData subscription = (SubscriptionData) entitlementApi.createSubscription(bundleId,
new PlanPhaseSpecifier(productName, ProductCategory.BASE, term, planSet, null),
requestedDate == null ? clock.getUTCNow() : requestedDate, context);
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 0b44a23..54811a9 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
@@ -107,13 +107,15 @@ public abstract class TestUserApiCancel extends TestApiBase {
billingApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, context);
subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
- testListener.pushExpectedEvent(NextEvent.CANCEL);
-
// CANCEL
+ testListener.setNonExpectedMode();
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
subscription.cancel(clock.getUTCNow(), false, context);
- assertFalse(testListener.isCompleted(5000));
+ assertFalse(testListener.isCompleted(3000));
+ testListener.reset();
// MOVE TO EOT + RECHECK
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
clock.addDeltaFromReality(ctd);
DateTime future = clock.getUTCNow();
assertTrue(testListener.isCompleted(5000));
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 81a97a6..6b5ce62 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
@@ -133,10 +133,11 @@ public abstract class TestUserApiChangePlan extends TestApiBase {
billingApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, context);
// RE READ SUBSCRIPTION + CHANGE PLAN
+ testListener.setNonExpectedMode();
testListener.pushExpectedEvent(NextEvent.CHANGE);
subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
subscription.changePlan(toProd, toTerm, toPlanSet, clock.getUTCNow(), context);
- assertFalse(testListener.isCompleted(5000));
+ assertFalse(testListener.isCompleted(3000));
testListener.reset();
// CHECK CHANGE PLAN
@@ -249,16 +250,18 @@ public abstract class TestUserApiChangePlan extends TestApiBase {
// CHANGE PLAN
currentTime = clock.getUTCNow();
-
- testListener.pushExpectedEvent(NextEvent.CHANGE);
subscription.changePlan(toProd, toTerm, toPlanSet, clock.getUTCNow(), context);
checkChangePlan(subscription, fromProd, ProductCategory.BASE, fromTerm, PhaseType.EVERGREEN);
// CHECK CHANGE DID NOT KICK IN YET
- assertFalse(testListener.isCompleted(5000));
+ testListener.setNonExpectedMode();
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
+ assertFalse(testListener.isCompleted(3000));
+ testListener.reset();
// MOVE TO AFTER CTD
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
clock.addDeltaFromReality(ctd);
currentTime = clock.getUTCNow();
assertTrue(testListener.isCompleted(5000));
@@ -271,18 +274,19 @@ public abstract class TestUserApiChangePlan extends TestApiBase {
assertNotNull(currentPhase);
assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
- testListener.pushExpectedEvent(NextEvent.PHASE);
-
// MOVE TIME ABOUT ONE MONTH BEFORE NEXT EXPECTED PHASE CHANGE
+ testListener.setNonExpectedMode();
+ testListener.pushExpectedEvent(NextEvent.PHASE);
clock.addDeltaFromReality(getDurationMonth(11));
-
currentTime = clock.getUTCNow();
- assertFalse(testListener.isCompleted(5000));
+ assertFalse(testListener.isCompleted(3000));
+ testListener.reset();
DateTime nextExpectedPhaseChange = DefaultClock.addDuration(newChargedThroughDate, currentPhase.getDuration());
checkNextPhaseChange(subscription, 1, nextExpectedPhaseChange);
// MOVE TIME RIGHT AFTER NEXT EXPECTED PHASE CHANGE
+ testListener.pushExpectedEvent(NextEvent.PHASE);
clock.addDeltaFromReality(getDurationMonth(1));
currentTime = clock.getUTCNow();
assertTrue(testListener.isCompleted(5000));
@@ -317,14 +321,16 @@ public abstract class TestUserApiChangePlan extends TestApiBase {
subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
// CHANGE EOT
+ testListener.setNonExpectedMode();
testListener.pushExpectedEvent(NextEvent.CHANGE);
subscription.changePlan("Pistol", BillingPeriod.MONTHLY, "gunclubDiscount", clock.getUTCNow(), context);
- assertFalse(testListener.isCompleted(5000));
+ assertFalse(testListener.isCompleted(3000));
+ testListener.reset();
// CHANGE
testListener.pushExpectedEvent(NextEvent.CHANGE);
subscription.changePlan("Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount", clock.getUTCNow(), context);
- assertFalse(testListener.isCompleted(5000));
+ assertTrue(testListener.isCompleted(5000));
Plan currentPlan = subscription.getCurrentPlan();
assertNotNull(currentPlan);
@@ -365,15 +371,17 @@ public abstract class TestUserApiChangePlan extends TestApiBase {
subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
// CHANGE EOT
+ testListener.setNonExpectedMode();
testListener.pushExpectedEvent(NextEvent.CHANGE);
subscription.changePlan("Shotgun", BillingPeriod.MONTHLY, "gunclubDiscount", clock.getUTCNow(), context);
- assertFalse(testListener.isCompleted(5000));
+ assertFalse(testListener.isCompleted(3000));
testListener.reset();
// CHANGE EOT
+ testListener.setNonExpectedMode();
testListener.pushExpectedEvent(NextEvent.CHANGE);
subscription.changePlan("Pistol", BillingPeriod.ANNUAL, "gunclubDiscount", clock.getUTCNow(), context);
- assertFalse(testListener.isCompleted(5000));
+ assertFalse(testListener.isCompleted(3000));
testListener.reset();
// CHECK NO CHANGE OCCURED YET
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 2fbd967..4a3051c 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
@@ -104,17 +104,19 @@ public class TestUserApiDemos extends TestApiBase {
billingApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, context);
subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
+ testListener.setNonExpectedMode();
testListener.pushExpectedEvent(NextEvent.CHANGE);
subscription.changePlan("Shotgun", BillingPeriod.ANNUAL, "gunclubDiscount", clock.getUTCNow(), context);
- assertFalse(testListener.isCompleted(5000));
+ assertFalse(testListener.isCompleted(3000));
testListener.reset();
displayState(subscription.getId(), "STEP 4. SET CTD AND CHANGE PLAN EOT (Shotgun)");
/* STEP 5. CHANGE AGAIN */
+ testListener.setNonExpectedMode();
testListener.pushExpectedEvent(NextEvent.CHANGE);
subscription.changePlan("Pistol", BillingPeriod.ANNUAL, "gunclubDiscount", clock.getUTCNow(), context);
- assertFalse(testListener.isCompleted(5000));
+ assertFalse(testListener.isCompleted(3000));
testListener.reset();
displayState(subscription.getId(), "STEP 5. CHANGE AGAIN EOT (Pistol)");
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 de149be..56c0558 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
@@ -71,6 +71,7 @@ public class TestUserApiScenarios extends TestApiBase {
subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
// CANCEL EOT
+ testListener.setNonExpectedMode();
testListener.pushExpectedEvent(NextEvent.CANCEL);
subscription.cancel(clock.getUTCNow(), false, context);
assertFalse(testListener.isCompleted(5000));
@@ -80,10 +81,13 @@ public class TestUserApiScenarios extends TestApiBase {
subscription.uncancel(context);
// CHANGE EOT
+ testListener.setNonExpectedMode();
testListener.pushExpectedEvent(NextEvent.CHANGE);
subscription.changePlan("Pistol", BillingPeriod.MONTHLY, "gunclubDiscount", clock.getUTCNow(), context);
assertFalse(testListener.isCompleted(5000));
-
+ testListener.reset();
+
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
clock.addDeltaFromReality(ctd);
assertTrue(testListener.isCompleted(5000));
diff --git a/util/src/main/java/com/ning/billing/util/bus/PersistentBus.java b/util/src/main/java/com/ning/billing/util/bus/PersistentBus.java
index 7ede0d0..bfce245 100644
--- a/util/src/main/java/com/ning/billing/util/bus/PersistentBus.java
+++ b/util/src/main/java/com/ning/billing/util/bus/PersistentBus.java
@@ -42,7 +42,7 @@ import com.ning.billing.util.queue.PersistentQueueBase;
public class PersistentBus extends PersistentQueueBase implements Bus {
- private final static int NB_BUS_THREADS = 3;
+ private final static int NB_BUS_THREADS = 1;
private final static long TIMEOUT_MSEC = 15L * 1000L; // 15 sec
private final static long DELTA_IN_PROCESSING_TIME_MS = 1000L * 60L * 5L; // 5 minutes
private final static long SLEEP_TIME_MS = 1000; // 1 sec
diff --git a/util/src/test/java/com/ning/billing/api/TestApiListener.java b/util/src/test/java/com/ning/billing/api/TestApiListener.java
index 66310f8..120c37d 100644
--- a/util/src/test/java/com/ning/billing/api/TestApiListener.java
+++ b/util/src/test/java/com/ning/billing/api/TestApiListener.java
@@ -32,18 +32,22 @@ import com.ning.billing.payment.api.PaymentErrorEvent;
import com.ning.billing.payment.api.PaymentInfoEvent;
public class TestApiListener {
+
protected static final Logger log = LoggerFactory.getLogger(TestApiListener.class);
private final List<NextEvent> nextExpectedEvent;
private final TestListenerStatus testStatus;
+ private boolean nonExpectedMode;
+
private volatile boolean completed;
public TestApiListener(TestListenerStatus testStatus) {
nextExpectedEvent = new Stack<NextEvent>();
this.completed = false;
this.testStatus = testStatus;
+ this.nonExpectedMode = false;
}
public enum NextEvent {
@@ -63,16 +67,22 @@ public class TestApiListener {
REPAIR_BUNDLE
}
+ public void setNonExpectedMode() {
+ synchronized(this) {
+ this.nonExpectedMode = true;
+ }
+ }
+
@Subscribe
public void handleEntitlementEvents(RepairEntitlementEvent event) {
- log.info(String.format("TestBusHandler Got RepairEntitlementEvent event %s", event.toString()));
+ log.info(String.format("TestApiListener Got RepairEntitlementEvent event %s", event.toString()));
assertEqualsNicely(NextEvent.REPAIR_BUNDLE);
notifyIfStackEmpty();
}
@Subscribe
public void handleEntitlementEvents(SubscriptionEvent event) {
- log.info(String.format("TestBusHandler Got subscription event %s", event.toString()));
+ log.info(String.format("TestApiListener Got subscription event %s", event.toString()));
switch (event.getTransitionType()) {
case MIGRATE_ENTITLEMENT:
assertEqualsNicely(NextEvent.MIGRATE_ENTITLEMENT);
@@ -113,7 +123,7 @@ public class TestApiListener {
@Subscribe
public void handleInvoiceEvents(InvoiceCreationEvent event) {
- log.info(String.format("TestBusHandler Got Invoice event %s", event.toString()));
+ log.info(String.format("TestApiListener Got Invoice event %s", event.toString()));
assertEqualsNicely(NextEvent.INVOICE);
notifyIfStackEmpty();
@@ -121,24 +131,28 @@ public class TestApiListener {
@Subscribe
public void handlePaymentEvents(PaymentInfoEvent event) {
- log.info(String.format("TestBusHandler Got PaymentInfo event %s", event.toString()));
+ log.info(String.format("TestApiListener Got PaymentInfo event %s", event.toString()));
assertEqualsNicely(NextEvent.PAYMENT);
notifyIfStackEmpty();
}
@Subscribe
public void handlePaymentErrorEvents(PaymentErrorEvent event) {
- log.info(String.format("TestBusHandler Got PaymentError event %s", event.toString()));
+ log.info(String.format("TestApiListener Got PaymentError event %s", event.toString()));
}
public void reset() {
- nextExpectedEvent.clear();
- completed = true;
+ synchronized(this) {
+ nextExpectedEvent.clear();
+ completed = true;
+ nonExpectedMode = false;
+ }
}
public void pushExpectedEvent(NextEvent next) {
synchronized (this) {
- log.info("TestListener stacking expected event {}", next);
+ Joiner joiner = Joiner.on(" ");
+ log.info("TestListener stacking expected event {}, got [{}]", next, joiner.join(nextExpectedEvent));
nextExpectedEvent.add(next);
completed = false;
}
@@ -153,7 +167,7 @@ public class TestApiListener {
do {
try {
DateTime before = new DateTime();
- wait(1000);
+ wait(500);
if (completed) {
return completed;
}
@@ -165,15 +179,15 @@ public class TestApiListener {
}
} while (waitTimeMs > 0 && !completed);
}
- if (!completed) {
+ if (!completed && !nonExpectedMode) {
Joiner joiner = Joiner.on(" ");
- log.error("TestBusHandler did not complete in " + timeout + " ms, remaining events are " + joiner.join(nextExpectedEvent));
+ log.error("TestApiListener did not complete in " + timeout + " ms, remaining events are " + joiner.join(nextExpectedEvent));
}
return completed;
}
private void notifyIfStackEmpty() {
- log.debug("TestBusHandler notifyIfStackEmpty ENTER");
+ log.debug("TestApiListener notifyIfStackEmpty ENTER");
synchronized (this) {
if (nextExpectedEvent.isEmpty()) {
log.debug("notifyIfStackEmpty EMPTY");
@@ -181,7 +195,7 @@ public class TestApiListener {
notify();
}
}
- log.debug("TestBusHandler notifyIfStackEmpty EXIT");
+ log.debug("TestApiListener notifyIfStackEmpty EXIT");
}
private void assertEqualsNicely(NextEvent received) {
@@ -194,14 +208,19 @@ public class TestApiListener {
if (ev == received) {
it.remove();
foundIt = true;
+ if (!nonExpectedMode) {
+ log.info("TestApiListener found event {}. Yeah!", received);
+ } else {
+ log.error("TestApiListener found non expected event {}. Boohh! ", received);
+ }
break;
}
}
- if (!foundIt) {
+ if (!foundIt && !nonExpectedMode) {
Joiner joiner = Joiner.on(" ");
- log.error("TestBusHandler Received event " + received + "; expecting " + joiner.join(nextExpectedEvent));
+ log.error("TestApiListener Received event " + received + "; expecting " + joiner.join(nextExpectedEvent));
if (testStatus != null) {
- testStatus.failed("TestBusHandler Received event " + received + "; expecting " + joiner.join(nextExpectedEvent));
+ testStatus.failed("TestApiListener [ApiListenerStatus]: Received event " + received + "; expecting " + joiner.join(nextExpectedEvent));
}
}
}