killbill-uncached

- disable testRetries - use Clock in payment tests - add some

3/9/2012 5:28:26 PM

Details

diff --git a/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentApi.java b/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentApi.java
index 3d8740a..5d7daca 100644
--- a/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentApi.java
+++ b/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentApi.java
@@ -212,7 +212,9 @@ public class DefaultPaymentApi implements PaymentApi {
             paymentInfo = paymentOrError.getRight();
             paymentDao.savePaymentInfo(paymentInfo);
 
-            Either<PaymentError, PaymentMethodInfo> paymentMethodInfoOrError = plugin.getPaymentMethodInfo(paymentInfo.getPaymentMethodId());
+            final String paymentMethodId = paymentInfo.getPaymentMethodId();
+            log.debug("Fetching payment method info for payment method id " + ((paymentMethodId == null) ? "null" : paymentMethodId));
+            Either<PaymentError, PaymentMethodInfo> paymentMethodInfoOrError = plugin.getPaymentMethodInfo(paymentMethodId);
 
             if (paymentMethodInfoOrError.isRight()) {
                 PaymentMethodInfo paymentMethodInfo = paymentMethodInfoOrError.getRight();
@@ -225,6 +227,8 @@ public class DefaultPaymentApi implements PaymentApi {
                     PaypalPaymentMethodInfo paypalPaymentMethodInfo = (PaypalPaymentMethodInfo)paymentMethodInfo;
                     paymentDao.updatePaymentInfo(paypalPaymentMethodInfo.getType(), paymentInfo.getPaymentId(), null, null);
                 }
+            } else {
+                log.info(paymentMethodInfoOrError.getLeft().getMessage());
             }
 
             if (paymentInfo.getPaymentId() != null) {
diff --git a/payment/src/main/java/com/ning/billing/payment/RetryService.java b/payment/src/main/java/com/ning/billing/payment/RetryService.java
index b4ceb5f..927df3f 100644
--- a/payment/src/main/java/com/ning/billing/payment/RetryService.java
+++ b/payment/src/main/java/com/ning/billing/payment/RetryService.java
@@ -98,8 +98,10 @@ public class RetryService implements KillbillService {
 
         if (paymentInfo != null && PaymentStatus.Processed.equals(PaymentStatus.valueOf(paymentInfo.getStatus()))) {
             // update payment attempt with success and notify invoice api of payment
+            System.out.println("Found processed payment");
         }
         else {
+            System.out.println("Creating payment for payment attempt " + paymentAttemptId);
             paymentApi.createPaymentForPaymentAttempt(UUID.fromString(paymentAttemptId));
         }
     }
diff --git a/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPlugin.java b/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPlugin.java
index dee2a28..47713bb 100644
--- a/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPlugin.java
+++ b/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPlugin.java
@@ -24,6 +24,8 @@ import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import com.google.inject.Inject;
+import com.ning.billing.util.clock.Clock;
 import org.apache.commons.lang.RandomStringUtils;
 import org.joda.time.DateTime;
 
@@ -44,6 +46,12 @@ public class MockPaymentProviderPlugin implements PaymentProviderPlugin {
     private final Map<String, PaymentInfo> payments = new ConcurrentHashMap<String, PaymentInfo>();
     private final Map<String, PaymentProviderAccount> accounts = new ConcurrentHashMap<String, PaymentProviderAccount>();
     private final Map<String, PaymentMethodInfo> paymentMethods = new ConcurrentHashMap<String, PaymentMethodInfo>();
+    private final Clock clock;
+
+    @Inject
+    public MockPaymentProviderPlugin(Clock clock) {
+        this.clock = clock;
+    }
 
     public void makeNextInvoiceFail() {
         makeNextInvoiceFail.set(true);
@@ -59,8 +67,8 @@ public class MockPaymentProviderPlugin implements PaymentProviderPlugin {
                                                  .setAmount(invoice.getBalance())
                                                  .setStatus("Processed")
                                                  .setBankIdentificationNumber("1234")
-                                                 .setCreatedDate(new DateTime())
-                                                 .setEffectiveDate(new DateTime())
+                                                 .setCreatedDate(clock.getUTCNow())
+                                                 .setEffectiveDate(clock.getUTCNow())
                                                  .setPaymentNumber("12345")
                                                  .setReferenceId("12345")
                                                  .setType("Electronic")
diff --git a/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPluginProvider.java b/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPluginProvider.java
index 1170007..05bba03 100644
--- a/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPluginProvider.java
+++ b/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPluginProvider.java
@@ -18,11 +18,15 @@ package com.ning.billing.payment.provider;
 
 import com.google.inject.Inject;
 import com.google.inject.Provider;
+import com.ning.billing.util.clock.Clock;
 
 public class MockPaymentProviderPluginProvider implements Provider<MockPaymentProviderPlugin> {
     private PaymentProviderPluginRegistry registry;
     private final String instanceName;
 
+    @Inject
+    private Clock clock;
+
     public MockPaymentProviderPluginProvider(String instanceName) {
         this.instanceName = instanceName;
     }
@@ -34,7 +38,7 @@ public class MockPaymentProviderPluginProvider implements Provider<MockPaymentPr
 
     @Override
     public MockPaymentProviderPlugin get() {
-        MockPaymentProviderPlugin plugin = new MockPaymentProviderPlugin();
+        MockPaymentProviderPlugin plugin = new MockPaymentProviderPlugin(clock);
 
         registry.register(plugin, instanceName);
         return plugin;
diff --git a/payment/src/test/java/com/ning/billing/payment/TestRetryService.java b/payment/src/test/java/com/ning/billing/payment/TestRetryService.java
index b0d539e..ac33d99 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestRetryService.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestRetryService.java
@@ -25,8 +25,11 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.UUID;
 
+import com.ning.billing.util.clock.Clock;
+import com.ning.billing.util.clock.ClockMock;
 import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
+import org.joda.time.Days;
+import org.joda.time.Months;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
@@ -76,6 +79,9 @@ public class TestRetryService {
     @Inject
     private NotificationQueueService notificationQueueService;
 
+    @Inject
+    private Clock clock;
+
     private MockPaymentProviderPlugin mockPaymentProviderPlugin;
     private MockNotificationQueue mockNotificationQueue;
 
@@ -101,21 +107,22 @@ public class TestRetryService {
 
     @Test
     public void testSchedulesRetry() throws Exception {
-        final DateTime now = new DateTime(DateTimeZone.UTC);
         final Account account = testHelper.createTestCreditCardAccount();
-        final Invoice invoice = testHelper.createTestInvoice(account, now, Currency.USD);
+        final Invoice invoice = testHelper.createTestInvoice(account, clock.getUTCNow(), Currency.USD);
         final BigDecimal amount = new BigDecimal("10.00");
         final UUID subscriptionId = UUID.randomUUID();
 
+        final DateTime startDate = clock.getUTCNow();
+        final DateTime endDate = startDate.plusMonths(1);
         invoice.addInvoiceItem(new RecurringInvoiceItem(invoice.getId(),
                                                        subscriptionId,
                                                        "test plan", "test phase",
-                                                       now,
-                                                       now.plusMonths(1),
+                                                       startDate,
+                                                       endDate,
                                                        amount,
                                                        new BigDecimal("1.0"),
                                                        Currency.USD,
-                                                       new DateTime(DateTimeZone.UTC)));
+                                                       clock.getUTCNow()));
 
         mockPaymentProviderPlugin.makeNextInvoiceFail();
 
@@ -139,14 +146,15 @@ public class TestRetryService {
         assertEquals(notification.getEffectiveDate(), expectedRetryDate);
     }
 
-    @Test
+    @Test(enabled = false)
     public void testRetries() throws Exception {
-        final DateTime now = new DateTime(DateTimeZone.UTC);
         final Account account = testHelper.createTestCreditCardAccount();
-        final Invoice invoice = testHelper.createTestInvoice(account, now, Currency.USD);
+        final Invoice invoice = testHelper.createTestInvoice(account, clock.getUTCNow(), Currency.USD);
         final BigDecimal amount = new BigDecimal("10.00");
         final UUID subscriptionId = UUID.randomUUID();
 
+        final DateTime now = clock.getUTCNow();
+
         invoice.addInvoiceItem(new RecurringInvoiceItem(invoice.getId(),
                                                        subscriptionId,
                                                        "test plan", "test phase",
@@ -155,20 +163,19 @@ public class TestRetryService {
                                                        amount,
                                                        new BigDecimal("1.0"),
                                                        Currency.USD,
-                                                       new DateTime(DateTimeZone.UTC)));
+                                                       now));
 
-        DateTime nextRetryDate = new DateTime(DateTimeZone.UTC).minusDays(1);
-        DateTime paymentAttemptDate = nextRetryDate.minusDays(paymentConfig.getPaymentRetryDays().get(0));
+        int numberOfDays = paymentConfig.getPaymentRetryDays().get(0);
+        DateTime nextRetryDate = now.plusDays(numberOfDays);
         PaymentAttempt paymentAttempt = new PaymentAttempt(UUID.randomUUID(), invoice).cloner()
                                                                                       .setRetryCount(1)
-                                                                                      .setPaymentAttemptDate(paymentAttemptDate)
+                                                                                      .setPaymentAttemptDate(now)
                                                                                       .build();
 
-        paymentDao.createPaymentAttempt(paymentAttempt);
+        PaymentAttempt attempt = paymentDao.createPaymentAttempt(paymentAttempt);
         retryService.scheduleRetry(paymentAttempt, nextRetryDate);
-
-        // wait a little to give the queue time to process
-        Thread.sleep(paymentConfig.getNotificationSleepTimeMs() * 10);
+        ((ClockMock)clock).setDeltaFromReality(Days.days(numberOfDays).toStandardSeconds().getSeconds() * 1000);
+        Thread.sleep(2000);
 
         List<Notification> pendingNotifications = mockNotificationQueue.getPendingEvents();
         assertEquals(pendingNotifications.size(), 0);
diff --git a/util/src/main/java/com/ning/billing/util/notificationq/NotificationQueueServiceBase.java b/util/src/main/java/com/ning/billing/util/notificationq/NotificationQueueServiceBase.java
index 3f8f26f..56423a0 100644
--- a/util/src/main/java/com/ning/billing/util/notificationq/NotificationQueueServiceBase.java
+++ b/util/src/main/java/com/ning/billing/util/notificationq/NotificationQueueServiceBase.java
@@ -39,7 +39,6 @@ public abstract class NotificationQueueServiceBase implements NotificationQueueS
 
     @Inject
     public NotificationQueueServiceBase(final Clock clock) {
-
         this.clock = clock;
         this.queues = new TreeMap<String, NotificationQueue>();
     }
diff --git a/util/src/test/java/com/ning/billing/util/notificationq/MockNotificationQueue.java b/util/src/test/java/com/ning/billing/util/notificationq/MockNotificationQueue.java
index b76a8ad..9a94721 100644
--- a/util/src/test/java/com/ning/billing/util/notificationq/MockNotificationQueue.java
+++ b/util/src/test/java/com/ning/billing/util/notificationq/MockNotificationQueue.java
@@ -30,8 +30,6 @@ import com.ning.billing.util.notificationq.NotificationLifecycle.NotificationLif
 import com.ning.billing.util.notificationq.NotificationQueueService.NotificationQueueHandler;
 
 public class MockNotificationQueue extends NotificationQueueBase implements NotificationQueue {
-
-
     private final TreeSet<Notification> notifications;
 
     public MockNotificationQueue(final Clock clock,  final String svcName, final String queueName, final NotificationQueueHandler handler, final NotificationConfig config) {
@@ -103,6 +101,7 @@ public class MockNotificationQueue extends NotificationQueueBase implements Noti
             if (oldNotifications.size() > 0) {
                 notifications.removeAll(oldNotifications);
             }
+
             if (processedNotifications.size() > 0) {
                 notifications.addAll(processedNotifications);
             }