killbill-memoizeit

Fix flakiness in beatrix tests because of class loader issues

3/25/2013 5:35:16 PM

Details

diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/osgi/TestJrubyPaymentPlugin.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/osgi/TestJrubyPaymentPlugin.java
index 081a2ec..9a552ac 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/osgi/TestJrubyPaymentPlugin.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/osgi/TestJrubyPaymentPlugin.java
@@ -57,7 +57,7 @@ public class TestJrubyPaymentPlugin extends TestOSGIBase {
         final String killbillVersion = System.getProperty("killbill.version");
 
         SetupBundleWithAssertion setupTest = new SetupBundleWithAssertion(BUNDLE_TEST_RESOURCE, osgiConfig, killbillVersion);
-        //setupTest.setupJrubyBundle();
+        setupTest.setupJrubyBundle();
 
     }
 
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
index 2afcfd3..7c1fb1d 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
@@ -239,6 +239,9 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
     public void beforeMethod() throws Exception {
 
         super.beforeMethod();
+
+        Thread.currentThread().setContextClassLoader(null);
+
         log.warn("\n");
         log.warn("RESET TEST FRAMEWORK\n\n");
 
diff --git a/beatrix/src/test/resources/killbill-payment-test.tar.gz b/beatrix/src/test/resources/killbill-payment-test.tar.gz
index 2ab733d..8b2a59c 100644
Binary files a/beatrix/src/test/resources/killbill-payment-test.tar.gz and b/beatrix/src/test/resources/killbill-payment-test.tar.gz differ
diff --git a/osgi/src/main/java/com/ning/billing/osgi/FileInstall.java b/osgi/src/main/java/com/ning/billing/osgi/FileInstall.java
index d6138da..1ffaec9 100644
--- a/osgi/src/main/java/com/ning/billing/osgi/FileInstall.java
+++ b/osgi/src/main/java/com/ning/billing/osgi/FileInstall.java
@@ -105,6 +105,11 @@ public class FileInstall {
         }
 
         final List<PluginRubyConfig> pluginRubyConfigs = pluginFinder.getLatestRubyPlugins();
+        if (pluginRubyConfigs.size() > 0 && jrubyBundlePath == null) {
+            logger.warn("Unable to find the JRuby bundle for ruby plugins");
+            return;
+        }
+
         for (final PluginRubyConfig cur : pluginRubyConfigs) {
             logger.info("Installing JRuby bundle for plugin {} from {}", cur.getPluginName(), cur.getRubyLoadDir());
             final Bundle bundle = context.installBundle("file:" + jrubyBundlePath);
@@ -118,7 +123,6 @@ public class FileInstall {
         if (new File(expectedPath).isFile()) {
             return expectedPath;
         } else {
-            logger.warn("Unable to find the JRuby bundle for ruby plugins. If you want to install ruby plugins, copy the jar to " + expectedPath);
             return null;
         }
     }
diff --git a/payment/src/main/java/com/ning/billing/payment/provider/DefaultPaymentProviderPluginRegistry.java b/payment/src/main/java/com/ning/billing/payment/provider/DefaultPaymentProviderPluginRegistry.java
index 6825980..492df8b 100644
--- a/payment/src/main/java/com/ning/billing/payment/provider/DefaultPaymentProviderPluginRegistry.java
+++ b/payment/src/main/java/com/ning/billing/payment/provider/DefaultPaymentProviderPluginRegistry.java
@@ -20,6 +20,9 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import com.ning.billing.osgi.api.OSGIServiceDescriptor;
 import com.ning.billing.osgi.api.OSGIServiceRegistration;
 import com.ning.billing.payment.plugin.api.PaymentPluginApi;
@@ -30,6 +33,8 @@ import com.google.inject.Inject;
 
 public class DefaultPaymentProviderPluginRegistry implements OSGIServiceRegistration<PaymentPluginApi> {
 
+    private final static Logger log = LoggerFactory.getLogger(DefaultPaymentProviderPluginRegistry.class);
+
     private final String defaultPlugin;
     private final Map<String, PaymentPluginApi> pluginsByName = new ConcurrentHashMap<String, PaymentPluginApi>();
 
@@ -41,11 +46,13 @@ public class DefaultPaymentProviderPluginRegistry implements OSGIServiceRegistra
 
     @Override
     public void registerService(final OSGIServiceDescriptor desc, final PaymentPluginApi service) {
+        log.info("DefaultPaymentProviderPluginRegistry registering service " + desc.getServiceName().toLowerCase());
         pluginsByName.put(desc.getServiceName().toLowerCase(), service);
     }
 
     @Override
     public void unregisterService(final String serviceName) {
+        log.info("DefaultPaymentProviderPluginRegistry unregistering service " + serviceName.toLowerCase());
         pluginsByName.remove(serviceName.toLowerCase());
     }