killbill-memoizeit

Changes

Details

diff --git a/api/src/main/java/com/ning/billing/config/ICatalogConfig.java b/api/src/main/java/com/ning/billing/config/ICatalogConfig.java
index 88fbefb..29699fe 100644
--- a/api/src/main/java/com/ning/billing/config/ICatalogConfig.java
+++ b/api/src/main/java/com/ning/billing/config/ICatalogConfig.java
@@ -17,10 +17,12 @@
 package com.ning.billing.config;
 
 import org.skife.config.Config;
+import org.skife.config.Default;
 
-public interface ICatalogConfig extends IKillbillConfig {
+public interface ICatalogConfig {
 
     @Config("killbill.catalog.uri")
+    @Default("jar:///com/ning/billing/irs/catalog/NingCatalog.xml")
     String getCatalogURI();
-    
+
 }
diff --git a/api/src/main/java/com/ning/billing/entitlement/IEntitlementSystem.java b/api/src/main/java/com/ning/billing/entitlement/IEntitlementSystem.java
index e6528b8..27881f5 100644
--- a/api/src/main/java/com/ning/billing/entitlement/IEntitlementSystem.java
+++ b/api/src/main/java/com/ning/billing/entitlement/IEntitlementSystem.java
@@ -16,13 +16,8 @@
 
 package com.ning.billing.entitlement;
 
-import java.io.InputStream;
+import com.ning.billing.lifecycle.IService;
 
-public interface IEntitlementSystem {
+public interface IEntitlementSystem extends IService {
 
-    public void initialize();
-
-    public void start();
-
-    public void stop();
 }
diff --git a/api/src/main/java/com/ning/billing/lifecycle/IService.java b/api/src/main/java/com/ning/billing/lifecycle/IService.java
index 83c67db..2e4a27f 100644
--- a/api/src/main/java/com/ning/billing/lifecycle/IService.java
+++ b/api/src/main/java/com/ning/billing/lifecycle/IService.java
@@ -16,9 +16,6 @@
 
 package com.ning.billing.lifecycle;
 
-import com.ning.billing.config.IBusinessConfig;
-import com.ning.billing.config.IKillbillConfig;
-
 public interface IService {
 
     public static class ServiceException extends Exception  {
@@ -44,13 +41,17 @@ public interface IService {
 
     /**
      *
-     * @param businessConfig business configuration
-     * @param killbillConfig service detail configuration
+     * @return the name of the service
+     */
+    public String getName();
+
+    /**
+     *
      * @throws ServiceException
      *
      * Initialize the service prior to start
      */
-    public void initialize(IBusinessConfig businessConfig, IKillbillConfig killbillConfig)
+    public void initialize()
         throws ServiceException;
 
     /**
diff --git a/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java b/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java
index ef64c0e..28b9725 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java
@@ -16,61 +16,74 @@
 
 package com.ning.billing.catalog;
 
+import java.io.File;
 import java.net.URI;
 
+import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.ning.billing.catalog.api.ICatalog;
 import com.ning.billing.catalog.api.ICatalogService;
 import com.ning.billing.catalog.io.CatalogLoader;
-import com.ning.billing.config.IBusinessConfig;
 import com.ning.billing.config.ICatalogConfig;
-import com.ning.billing.config.IKillbillConfig;
 import com.ning.billing.lifecycle.IService;
 
 
 public class CatalogService implements IService, Provider<ICatalog>, ICatalogService {
-	
-	private static ICatalog catalog;
-
-	@Override
-	public void initialize(IBusinessConfig businessConfig,
-			IKillbillConfig killbillConfig) throws ServiceException {
-		if(killbillConfig instanceof ICatalogConfig) {
-			ICatalogConfig catalogConfig = (ICatalogConfig) killbillConfig;
-			try {
-				catalog = CatalogLoader.getCatalogFromURI(new URI(catalogConfig.getCatalogURI()));
-			} catch (Exception e) {
-				throw new ServiceException(e);
-			}
-		} else {
-			throw new ServiceException("Configuration does not include catalog configuration.");
-		}
-	}
-
-	@Override
-	public void start() throws ServiceException {
-		// Intentionally blank
-		
-	}
-
-	@Override
-	public void stop() throws ServiceException {
-		// Intentionally blank
-		
-	}
-
-	/* (non-Javadoc)
-	 * @see com.ning.billing.catalog.ICatlogService#getCatalog()
-	 */
-	@Override
-	public ICatalog getCatalog() {
-		return catalog;
-	}
-
-	
-	// Should be able to use bind(ICatalog.class).toProvider(CatalogService.class);
-	@Override
-	public ICatalog get() {
-		return catalog;
-	}
+
+
+    private static final String CATALOG_SERVICE_NAME = "catalog-service";
+
+    private final ICatalogConfig config;
+
+    private static ICatalog catalog;
+
+
+    @Inject
+    public CatalogService(ICatalogConfig config) {
+        this.config = config;
+        System.out.println(config.getCatalogURI());
+    }
+
+    @Override
+    public void initialize() throws ServiceException {
+        try {
+            catalog = CatalogLoader.getCatalogFromProperty(config.getCatalogURI());
+        } catch (Exception e) {
+            throw new ServiceException(e);
+        }
+    }
+
+    @Override
+    public String getName() {
+        return CATALOG_SERVICE_NAME;
+    }
+
+
+    @Override
+    public void start() throws ServiceException {
+        // Intentionally blank
+
+    }
+
+    @Override
+    public void stop() throws ServiceException {
+        // Intentionally blank
+
+    }
+
+    /* (non-Javadoc)
+     * @see com.ning.billing.catalog.ICatlogService#getCatalog()
+     */
+    @Override
+    public ICatalog getCatalog() {
+        return catalog;
+    }
+
+
+    // Should be able to use bind(ICatalog.class).toProvider(CatalogService.class);
+    @Override
+    public ICatalog get() {
+        return catalog;
+    }
+
 }
diff --git a/catalog/src/main/java/com/ning/billing/catalog/CatalogUserApi.java b/catalog/src/main/java/com/ning/billing/catalog/CatalogUserApi.java
index fc61853..a2ff0b0 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/CatalogUserApi.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/CatalogUserApi.java
@@ -26,7 +26,7 @@ public class CatalogUserApi implements ICatalogUserApi {
 
     @Override
     public ICatalog getCatalog(final String catalogName) {
-    	String name = catalogName; 
+    	String name = catalogName;
         try {
             return CatalogLoader.getCatalogFromURI(new File(name).toURI());
         } catch (Exception e) {
diff --git a/catalog/src/main/java/com/ning/billing/catalog/io/CatalogLoader.java b/catalog/src/main/java/com/ning/billing/catalog/io/CatalogLoader.java
index 30ca5e7..f612413 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/io/CatalogLoader.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/io/CatalogLoader.java
@@ -16,9 +16,11 @@
 
 package com.ning.billing.catalog.io;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URL;
 
 import javax.xml.XMLConstants;
@@ -41,15 +43,29 @@ public class CatalogLoader {
 	private static final String URI_SCHEME_FOR_CLASSPATH = "jar";
 	public static Logger log = LoggerFactory.getLogger(CatalogLoader.class);
 
-    public static Catalog getCatalogFromURI(URI uri) throws SAXException, InvalidConfigException, JAXBException, IOException, TransformerException {
-        String scheme = uri.getScheme();
+
+
+	public static Catalog getCatalogFromProperty(String property) throws Exception {
+	    if (property == null) {
+	        return null;
+	    }
+	    URI uri = (property.startsWith(URI_SCHEME_FOR_CLASSPATH)) ?
+	            new URI(property) :
+	                new File("src/test/resources/testInput.xml").toURI();
+	            return getCatalogFromURI(uri);
+	}
+
+
+	public static Catalog getCatalogFromURI(URI uri) throws SAXException, InvalidConfigException, JAXBException, IOException, TransformerException {
+
+	    String scheme = uri.getScheme();
         if (scheme.equals(URI_SCHEME_FOR_CLASSPATH)) {
         	InputStream resourceStream = CatalogLoader.class.getResourceAsStream(uri.getPath());
         	return getCatalogStream(resourceStream);
         }
         return getCatalogFromURL(uri.toURL());
     }
-    
+
     public static Catalog getCatalogFromURL(URL url) throws SAXException, InvalidConfigException, JAXBException, IOException, TransformerException {
         Object o = unmarshaller().unmarshal(url);
         if (o instanceof Catalog) {
@@ -74,13 +90,13 @@ public class CatalogLoader {
         }
     }
 
-    
+
     public static void validate(Catalog c) {
             c.initialize(c);
             ValidationErrors errs = c.validate();
-            System.out.println("Errors: " + errs.size() + " for " + c.getCatalogURL());       
+            System.out.println("Errors: " + errs.size() + " for " + c.getCatalogURL());
     }
-    
+
     public static Unmarshaller unmarshaller() throws JAXBException, SAXException, IOException, TransformerException {
     	 JAXBContext context =JAXBContext.newInstance(Catalog.class);
 
@@ -89,8 +105,8 @@ public class CatalogLoader {
 
          Schema schema = factory.newSchema(XMLSchemaGenerator.xmlSchema());
          um.setSchema(schema);
-         
+
          return um;
     }
-	
+
 }
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 437f21c..9389969 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
@@ -19,9 +19,9 @@ package com.ning.billing.entitlement.engine.core;
 import java.util.List;
 
 import com.google.inject.Inject;
+import com.ning.billing.config.IEntitlementConfig;
 import com.ning.billing.entitlement.engine.dao.IEntitlementDao;
 import com.ning.billing.entitlement.events.IEvent;
-import com.ning.billing.entitlement.glue.IEntitlementConfig;
 import com.ning.billing.util.clock.IClock;
 
 public class ApiEventProcessor extends ApiEventProcessorBase {
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 b83b0be..cf20530 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
@@ -29,9 +29,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.inject.Inject;
+import com.ning.billing.config.IEntitlementConfig;
 import com.ning.billing.entitlement.engine.dao.IEntitlementDao;
 import com.ning.billing.entitlement.events.IEvent;
-import com.ning.billing.entitlement.glue.IEntitlementConfig;
 import com.ning.billing.util.clock.IClock;
 
 public abstract class ApiEventProcessorBase implements IApiEventProcessor {
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 d0e1b02..b71f669 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
@@ -25,60 +25,68 @@ import org.slf4j.LoggerFactory;
 
 import com.google.inject.Inject;
 import com.ning.billing.catalog.api.ICatalog;
+import com.ning.billing.catalog.api.ICatalogService;
 import com.ning.billing.catalog.api.ICatalogUserApi;
 import com.ning.billing.catalog.api.IPlan;
+import com.ning.billing.config.IEntitlementConfig;
 
 import com.ning.billing.entitlement.IEntitlementSystem;
 import com.ning.billing.entitlement.alignment.IPlanAligner;
 import com.ning.billing.entitlement.alignment.IPlanAligner.TimedPhase;
 import com.ning.billing.entitlement.alignment.PlanAligner;
 import com.ning.billing.entitlement.api.user.IApiListener;
-import com.ning.billing.entitlement.api.user.ISubscription;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.engine.dao.IEntitlementDao;
 import com.ning.billing.entitlement.events.IEvent;
 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.ApiEventType;
 import com.ning.billing.entitlement.events.user.IUserEvent;
-import com.ning.billing.entitlement.glue.IEntitlementConfig;
 import com.ning.billing.util.clock.IClock;
 
 public class Engine implements IEventListener, IEntitlementSystem {
 
+    private static final String ENTITLEMENT_SERVICE_NAME = "entitlement-service";
+
     private final static Logger log = LoggerFactory.getLogger(Engine.class);
     private static Engine instance = null;
 
     private final IClock clock;
-    private final ICatalog catalog;
+
     private final IEntitlementDao dao;
     private final IApiEventProcessor apiEventProcessor;
-    private final ICatalogUserApi catalogApi;
+    private final ICatalogService catalogService;
     private final IPlanAligner planAligner;
 
     private List<IApiListener> observers;
+    private ICatalog catalog;
+
 
     @Inject
-    public Engine(IClock clock, IEntitlementDao dao, IApiEventProcessor apiEventProcessor, ICatalogUserApi catalogApi,
+    public Engine(IClock clock, IEntitlementDao dao, IApiEventProcessor apiEventProcessor, ICatalogService catalogService,
             IPlanAligner planAligner, IEntitlementConfig config) {
         super();
         this.clock = clock;
-        this.catalogApi = catalogApi;
         this.dao = dao;
         this.apiEventProcessor = apiEventProcessor;
         this.planAligner = planAligner;
-        this.catalog = readCatalogFromConfig(config.getCatalogConfigFileName());
+        this.catalogService = catalogService;
         this.observers = null;
         instance = this;
 
-        // STEPH yack
-        ((PlanAligner) planAligner).init(catalog);
     }
 
     @Override
+    public String getName() {
+        return ENTITLEMENT_SERVICE_NAME;
+    }
+
+
+    @Override
     public void initialize() {
-        // TODO Auto-generated method stub
+        this.catalog = catalogService.getCatalog();
+        // STEPH yack
+        ((PlanAligner) planAligner).init(catalog);
 
     }
 
@@ -152,10 +160,6 @@ public class Engine implements IEventListener, IEntitlementSystem {
     }
 
 
-    private ICatalog readCatalogFromConfig(String configFile) {
-        return catalogApi.getCatalog(configFile);
-    }
-
     //
     // STEPH would be nice to have those go away..
     //
@@ -182,4 +186,5 @@ public class Engine implements IEventListener, IEntitlementSystem {
     }
 
 
+
 }
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java
index 8dfc34a..db4e375 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java
@@ -33,6 +33,7 @@ import org.slf4j.LoggerFactory;
 import com.google.common.collect.Lists;
 import com.google.inject.Inject;
 import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.config.IEntitlementConfig;
 import com.ning.billing.entitlement.api.user.ISubscription;
 import com.ning.billing.entitlement.api.user.ISubscriptionBundle;
 import com.ning.billing.entitlement.api.user.Subscription;
@@ -42,7 +43,6 @@ import com.ning.billing.entitlement.events.IEvent.EventType;
 import com.ning.billing.entitlement.events.user.ApiEventType;
 import com.ning.billing.entitlement.events.user.IUserEvent;
 import com.ning.billing.entitlement.exceptions.EntitlementError;
-import com.ning.billing.entitlement.glue.IEntitlementConfig;
 import com.ning.billing.util.Hostname;
 import com.ning.billing.util.clock.IClock;
 
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java b/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
index fd27374..d57a0d8 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
@@ -21,6 +21,7 @@ import org.skife.config.ConfigurationObjectFactory;
 import com.google.inject.AbstractModule;
 import com.ning.billing.catalog.CatalogUserApi;
 import com.ning.billing.catalog.api.ICatalogUserApi;
+import com.ning.billing.config.IEntitlementConfig;
 import com.ning.billing.entitlement.IEntitlementSystem;
 import com.ning.billing.entitlement.alignment.IPlanAligner;
 import com.ning.billing.entitlement.alignment.PlanAligner;
@@ -44,10 +45,6 @@ public class EntitlementModule extends AbstractModule {
         bind(ICatalogUserApi.class).to(CatalogUserApi.class).asEagerSingleton();
     }
 
-    protected void installAccount() {
-//        bind(IAccount.class).to(CatalogUserApi.class);
-    }
-
     protected void installClock() {
         bind(IClock.class).to(Clock.class).asEagerSingleton();
     }
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 0f9806d..8de2d8e 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
@@ -45,9 +45,11 @@ import com.ning.billing.account.api.IAccount;
 import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.catalog.api.ICatalog;
+import com.ning.billing.catalog.api.ICatalogService;
 import com.ning.billing.catalog.api.ICatalogUserApi;
 import com.ning.billing.catalog.api.IDuration;
 import com.ning.billing.catalog.api.TimeUnit;
+import com.ning.billing.config.IEntitlementConfig;
 import com.ning.billing.entitlement.IEntitlementSystem;
 import com.ning.billing.entitlement.api.ApiTestListener;
 import com.ning.billing.entitlement.api.ApiTestListener.NextEvent;
@@ -59,7 +61,7 @@ import com.ning.billing.entitlement.events.IEvent;
 import com.ning.billing.entitlement.events.phase.IPhaseEvent;
 import com.ning.billing.entitlement.events.user.ApiEventType;
 import com.ning.billing.entitlement.events.user.IUserEvent;
-import com.ning.billing.entitlement.glue.IEntitlementConfig;
+import com.ning.billing.lifecycle.IService.ServiceException;
 import com.ning.billing.util.clock.ClockMock;
 import com.ning.billing.util.clock.IClock;
 
@@ -69,11 +71,11 @@ public abstract class TestUserApiBase {
 
     protected static final long DAY_IN_MS = (24 * 3600 * 1000);
 
-    protected IEntitlementSystem service;
-    protected Engine engine;
+    protected IEntitlementSystem entitlementService;
+    //protected Engine engine;
     protected IEntitlementUserApi entitlementApi;
     protected IEntitlementBillingApi billingApi;
-    protected ICatalogUserApi catalogApi;
+    protected ICatalogService catalogService;
     protected IEntitlementConfig config;
     protected IEntitlementDao dao;
     protected ClockMock clock;
@@ -110,20 +112,24 @@ public abstract class TestUserApiBase {
         loadSystemPropertiesFromClasspath("/entitlement.properties");
         final Injector g = getInjector();
 
-        service = g.getInstance(IEntitlementSystem.class);
-        engine = g.getInstance(Engine.class);
+        entitlementService = g.getInstance(IEntitlementSystem.class);
+        //engine = g.getInstance(Engine.class);
         entitlementApi = g.getInstance(IEntitlementUserApi.class);
-        catalogApi = g.getInstance(ICatalogUserApi.class);
+        catalogService = g.getInstance(ICatalogService.class);
         billingApi = g.getInstance(IEntitlementBillingApi.class);
         config = g.getInstance(IEntitlementConfig.class);
         dao = g.getInstance(IEntitlementDao.class);
         clock = (ClockMock) g.getInstance(IClock.class);
         try {
 
-            service.initialize();
+            catalogService.initialize();
+            entitlementService.initialize();
             init();
         } catch (EntitlementUserApiException e) {
             Assert.fail(e.getMessage());
+        } catch (ServiceException e) {
+            e.printStackTrace();
+            Assert.fail(e.getMessage());
         }
     }
 
@@ -133,7 +139,7 @@ public abstract class TestUserApiBase {
         account = getAccount();
         assertNotNull(account);
 
-        catalog = catalogApi.getCatalog(config.getCatalogConfigFileName());
+        catalog = catalogService.getCatalog();
         assertNotNull(catalog);
 
         testListener = new ApiTestListener();
@@ -145,25 +151,33 @@ public abstract class TestUserApiBase {
 
     @BeforeMethod(groups={"setup"})
     public void setupTest() {
-        log.warn("\n");
-        log.warn("RESET TEST FRAMEWORK\n\n");
-
-        testListener.reset();
-        clock.resetDeltaFromReality();
-        ((IEntitlementDaoMock) dao).reset();
         try {
-            bundle = entitlementApi.createBundleForAccount(account, "myDefaultBundle");
-        } catch (EntitlementUserApiException e) {
+            log.warn("\n");
+            log.warn("RESET TEST FRAMEWORK\n\n");
+
+            testListener.reset();
+            clock.resetDeltaFromReality();
+            ((IEntitlementDaoMock) dao).reset();
+            try {
+                bundle = entitlementApi.createBundleForAccount(account, "myDefaultBundle");
+            } catch (EntitlementUserApiException e) {
+                Assert.fail(e.getMessage());
+            }
+            assertNotNull(bundle);
+            entitlementService.start();
+        } catch (ServiceException e) {
             Assert.fail(e.getMessage());
         }
-        assertNotNull(bundle);
-        service.start();
     }
 
     @AfterMethod(groups={"setup"})
     public void cleanupTest() {
-        service.stop();
-        log.warn("DONE WITH TEST\n");
+        try {
+            entitlementService.stop();
+            log.warn("DONE WITH TEST\n");
+        } catch (ServiceException e) {
+            Assert.fail(e.getMessage());
+        }
     }
 
     // Glue magic to invoke the real test
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelMemory.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelMemory.java
index 05fe153..896c592 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelMemory.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelMemory.java
@@ -22,6 +22,7 @@ import org.testng.annotations.Test;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Stage;
+import com.ning.billing.entitlement.glue.CatalogModuleMock;
 import com.ning.billing.entitlement.glue.EngineModuleMemoryMock;
 
 public class TestUserApiCancelMemory extends TestUserApiCancel {
@@ -29,7 +30,7 @@ public class TestUserApiCancelMemory extends TestUserApiCancel {
 
     @Override
     protected Injector getInjector() {
-        return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleMemoryMock());
+        return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleMemoryMock(), new CatalogModuleMock());
     }
 
     @Test(enabled=true, groups={"fast"})
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelSql.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelSql.java
index 84f11e2..58e8891 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelSql.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelSql.java
@@ -21,6 +21,7 @@ import org.testng.annotations.Test;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Stage;
+import com.ning.billing.entitlement.glue.CatalogModuleMock;
 import com.ning.billing.entitlement.glue.EngineModuleSqlMock;
 
 public class TestUserApiCancelSql extends TestUserApiCancel {
@@ -30,7 +31,7 @@ public class TestUserApiCancelSql extends TestUserApiCancel {
 
     @Override
     public Injector getInjector() {
-        return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleSqlMock());
+        return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleSqlMock(), new CatalogModuleMock());
     }
 
     @Test(enabled= true, groups={"stress"})
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanMemory.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanMemory.java
index 56c1a74..acb5e69 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanMemory.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanMemory.java
@@ -21,13 +21,14 @@ import org.testng.annotations.Test;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Stage;
+import com.ning.billing.entitlement.glue.CatalogModuleMock;
 import com.ning.billing.entitlement.glue.EngineModuleMemoryMock;
 
 public class TestUserApiChangePlanMemory extends TestUserApiChangePlan {
 
     @Override
     protected Injector getInjector() {
-        return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleMemoryMock());
+        return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleMemoryMock(), new CatalogModuleMock());
     }
 
 
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanSql.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanSql.java
index 30ace87..174b85e 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanSql.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanSql.java
@@ -21,6 +21,7 @@ import org.testng.annotations.Test;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Stage;
+import com.ning.billing.entitlement.glue.CatalogModuleMock;
 import com.ning.billing.entitlement.glue.EngineModuleSqlMock;
 
 public class TestUserApiChangePlanSql extends TestUserApiChangePlan {
@@ -29,7 +30,7 @@ public class TestUserApiChangePlanSql extends TestUserApiChangePlan {
 
     @Override
     public Injector getInjector() {
-        return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleSqlMock());
+        return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleSqlMock(), new CatalogModuleMock());
     }
 
     @Test(enabled= true, groups={"stress"})
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateMemory.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateMemory.java
index 8ec02d7..1c119f8 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateMemory.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateMemory.java
@@ -21,6 +21,7 @@ import org.testng.annotations.Test;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Stage;
+import com.ning.billing.entitlement.glue.CatalogModuleMock;
 import com.ning.billing.entitlement.glue.EngineModuleMemoryMock;
 
 public class TestUserApiCreateMemory extends TestUserApiCreate {
@@ -28,7 +29,7 @@ public class TestUserApiCreateMemory extends TestUserApiCreate {
 
     @Override
     protected Injector getInjector() {
-        return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleMemoryMock());
+        return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleMemoryMock(), new CatalogModuleMock());
     }
 
     @Test(enabled=true, groups={"fast"})
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateSql.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateSql.java
index 58fa52b..328976f 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateSql.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateSql.java
@@ -21,13 +21,14 @@ import org.testng.annotations.Test;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Stage;
+import com.ning.billing.entitlement.glue.CatalogModuleMock;
 import com.ning.billing.entitlement.glue.EngineModuleSqlMock;
 
 public class TestUserApiCreateSql extends TestUserApiCreate {
 
     @Override
     protected Injector getInjector() {
-        return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleSqlMock());
+        return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleSqlMock(), new CatalogModuleMock());
     }
 
     @Test(enabled=true, groups={"sql"})
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 4089936..38aed83 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
@@ -19,9 +19,9 @@ package com.ning.billing.entitlement.engine.core;
 import java.util.List;
 
 import com.google.inject.Inject;
+import com.ning.billing.config.IEntitlementConfig;
 import com.ning.billing.entitlement.engine.dao.IEntitlementDao;
 import com.ning.billing.entitlement.events.IEvent;
-import com.ning.billing.entitlement.glue.IEntitlementConfig;
 import com.ning.billing.util.clock.IClock;
 
 public class ApiEventProcessorMemoryMock extends ApiEventProcessorBase {
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/EntitlementDaoMemoryMock.java b/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/EntitlementDaoMemoryMock.java
index 143b069..cc574ee 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/EntitlementDaoMemoryMock.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/EntitlementDaoMemoryMock.java
@@ -31,6 +31,7 @@ import org.slf4j.LoggerFactory;
 import com.google.inject.Inject;
 import com.ning.billing.catalog.api.ProductCategory;
 import com.ning.billing.catalog.api.TimeUnit;
+import com.ning.billing.config.IEntitlementConfig;
 import com.ning.billing.entitlement.api.user.ISubscription;
 import com.ning.billing.entitlement.api.user.ISubscriptionBundle;
 import com.ning.billing.entitlement.api.user.Subscription;
@@ -38,11 +39,8 @@ import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.entitlement.events.IEvent;
 import com.ning.billing.entitlement.events.IEvent.EventType;
 import com.ning.billing.entitlement.events.IEventLyfecycle.IEventLyfecycleState;
-import com.ning.billing.entitlement.events.phase.IPhaseEvent;
-import com.ning.billing.entitlement.events.phase.PhaseEvent;
 import com.ning.billing.entitlement.events.user.ApiEventType;
 import com.ning.billing.entitlement.events.user.IUserEvent;
-import com.ning.billing.entitlement.glue.IEntitlementConfig;
 import com.ning.billing.util.clock.IClock;
 
 public class EntitlementDaoMemoryMock implements IEntitlementDao, IEntitlementDaoMock {
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/EntitlementDaoSqlMock.java b/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/EntitlementDaoSqlMock.java
index 114021e..24d6bff 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/EntitlementDaoSqlMock.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/EntitlementDaoSqlMock.java
@@ -24,7 +24,7 @@ import org.skife.jdbi.v2.sqlobject.mixins.CloseMe;
 import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
 
 import com.google.inject.Inject;
-import com.ning.billing.entitlement.glue.IEntitlementConfig;
+import com.ning.billing.config.IEntitlementConfig;
 import com.ning.billing.util.clock.IClock;
 
 public class EntitlementDaoSqlMock extends EntitlementDao implements IEntitlementDaoMock {
diff --git a/entitlement/src/test/resources/entitlement.properties b/entitlement/src/test/resources/entitlement.properties
index 372ce23..fb7a7c5 100644
--- a/entitlement/src/test/resources/entitlement.properties
+++ b/entitlement/src/test/resources/entitlement.properties
@@ -1,4 +1,4 @@
-killbill.entitlement.catalog.config.file=src/test/resources/testInput.xml
+killbill.catalog.uri=src/test/resources/testInput.xml
 killbill.entitlement.dao.claim.time=60000
 killbill.entitlement.dao.ready.max=1
 killbill.entitlement.engine.notifications.sleep=500