Allon Mureinik has uploaded a new change for review.

Change subject: core: MockEJBStrategyRule
......................................................................

core: MockEJBStrategyRule

Introducing MockEJBStrategyRule to provide an easy and straight forward
way to mock EJBs and resources in bll tests.

This patch includes the new @Rule and refactors all the tests with
proprietary solutions for such mocking to use the new, standard way.

Change-Id: Ib0ae1b2c56f2b189729883bf34da9a295a8ae9d6
Signed-off-by: Allon Mureinik <amure...@redhat.com>
---
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/BackwardCompatibilityTaskCreationTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CommandBaseTest.java
D 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ExecuteTransactionAnswer.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterManagerTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lock/InMemoryLockManagerTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommandTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommandTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/RemoveStorageDomainTest.java
A 
backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/MockEJBStrategyRule.java
M 
backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
10 files changed, 123 insertions(+), 173 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/01/9401/1

diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/BackwardCompatibilityTaskCreationTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/BackwardCompatibilityTaskCreationTest.java
index e3fbfa5..594068c 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/BackwardCompatibilityTaskCreationTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/BackwardCompatibilityTaskCreationTest.java
@@ -3,11 +3,8 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
 import static org.ovirt.engine.core.utils.MockConfigRule.mockConfig;
 
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.theories.DataPoints;
@@ -35,13 +32,10 @@
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.utils.MockConfigRule;
+import org.ovirt.engine.core.utils.MockEJBStrategyRule;
 import org.ovirt.engine.core.utils.RandomUtils;
 import org.ovirt.engine.core.utils.RandomUtilsSeedingRule;
-import org.ovirt.engine.core.utils.ejb.BeanProxyType;
 import org.ovirt.engine.core.utils.ejb.BeanType;
-import org.ovirt.engine.core.utils.ejb.EJBUtilsStrategy;
-import org.ovirt.engine.core.utils.ejb.EjbUtils;
-import org.ovirt.engine.core.utils.ejb.EngineEJBUtilsStrategy;
 import org.ovirt.engine.core.utils.timer.SchedulerUtil;
 
 /**
@@ -60,6 +54,9 @@
             mockConfig(ConfigValues.AsyncTaskStatusCacheRefreshRateInSeconds, 
10),
             mockConfig(ConfigValues.AsyncTaskStatusCachingTimeInMinutes, 10)
             );
+
+    @Rule
+    public MockEJBStrategyRule ejbRule = new 
MockEJBStrategyRule(BeanType.SCHEDULER, mock(SchedulerUtil.class));
 
     @SuppressWarnings({ "unchecked", "rawtypes", "serial" })
     @DataPoints
@@ -126,19 +123,6 @@
                     }
                 }
         };
-    }
-
-    @Before
-    public void setUp() {
-        EJBUtilsStrategy ejbStrategy = mock(EJBUtilsStrategy.class);
-        SchedulerUtil sched = mock(SchedulerUtil.class);
-        when(ejbStrategy.<SchedulerUtil> findBean(BeanType.SCHEDULER, 
BeanProxyType.LOCAL)).thenReturn(sched);
-        EjbUtils.setStrategy(ejbStrategy);
-    }
-
-    @After
-    public void tearDown() {
-        EjbUtils.setStrategy(new EngineEJBUtilsStrategy());
     }
 
     @Theory
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CommandBaseTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CommandBaseTest.java
index edd49b9..9b53ce5 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CommandBaseTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CommandBaseTest.java
@@ -13,9 +13,6 @@
 import java.util.Collections;
 import java.util.List;
 
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-
 import org.apache.commons.lang.RandomStringUtils;
 import org.junit.After;
 import org.junit.Before;
@@ -31,34 +28,19 @@
 import org.ovirt.engine.core.compat.TransactionScopeOption;
 import org.ovirt.engine.core.dao.BusinessEntitySnapshotDAO;
 import org.ovirt.engine.core.utils.MockConfigRule;
+import org.ovirt.engine.core.utils.MockEJBStrategyRule;
 import org.ovirt.engine.core.utils.ThreadLocalParamsContainer;
-import org.ovirt.engine.core.utils.ejb.ContainerManagedResourceType;
-import org.ovirt.engine.core.utils.ejb.EJBUtilsStrategy;
-import org.ovirt.engine.core.utils.ejb.EjbUtils;
-import org.ovirt.engine.core.utils.ejb.EngineEJBUtilsStrategy;
 
 /** A test case for {@link CommandBase} */
 public class CommandBaseTest {
     @Rule
     public static MockConfigRule mcr = new 
MockConfigRule(mockConfig(ConfigValues.IsMultilevelAdministrationOn, false));
 
+    @Rule
+    public MockEJBStrategyRule ejbRule = new MockEJBStrategyRule();
+
     /** The session to use */
     private String session = "";
-
-    @Before
-    public void setUp() throws Exception {
-        EJBUtilsStrategy ejbStrategy = mock(EJBUtilsStrategy.class);
-        TransactionManager tm = mock(TransactionManager.class);
-        Transaction trans = mock(Transaction.class);
-        when(tm.getTransaction()).thenReturn(trans);
-        when(ejbStrategy.<TransactionManager> 
findResource(ContainerManagedResourceType.TRANSACTION_MANAGER)).thenReturn(tm);
-        EjbUtils.setStrategy(ejbStrategy);
-    }
-
-    @After
-    public void tearDown() {
-        EjbUtils.setStrategy(new EngineEJBUtilsStrategy());
-    }
 
     /** A dummy class for testing CommandBase's functionality */
     @SuppressWarnings("serial")
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ExecuteTransactionAnswer.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ExecuteTransactionAnswer.java
deleted file mode 100644
index 33dd847..0000000
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ExecuteTransactionAnswer.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.ovirt.engine.core.bll;
-
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-import org.ovirt.engine.core.utils.transaction.TransactionMethod;
-
-public class ExecuteTransactionAnswer implements Answer<Object> {
-    private int transactonMethodIndex;
-
-    public ExecuteTransactionAnswer(int transactonMethodIndex) {
-        this.transactonMethodIndex = transactonMethodIndex;
-    }
-
-    @Override
-    public Object answer(InvocationOnMock invocationOnMock) {
-        TransactionMethod<?> method = (TransactionMethod<?>) 
invocationOnMock.getArguments()[transactonMethodIndex];
-        return method.runInTransaction();
-    }
-}
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterManagerTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterManagerTest.java
index 8ba92dd..c562bc4 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterManagerTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterManagerTest.java
@@ -16,10 +16,6 @@
 import java.util.List;
 import java.util.Map;
 
-import javax.transaction.Status;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-
 import org.hamcrest.Matcher;
 import org.junit.Before;
 import org.junit.Rule;
@@ -67,9 +63,7 @@
 import org.ovirt.engine.core.dao.gluster.GlusterOptionDao;
 import org.ovirt.engine.core.dao.gluster.GlusterVolumeDao;
 import org.ovirt.engine.core.utils.MockConfigRule;
-import org.ovirt.engine.core.utils.ejb.ContainerManagedResourceType;
-import org.ovirt.engine.core.utils.ejb.EJBUtilsStrategy;
-import org.ovirt.engine.core.utils.ejb.EjbUtils;
+import org.ovirt.engine.core.utils.MockEJBStrategyRule;
 
 @RunWith(MockitoJUnitRunner.class)
 public class GlusterManagerTest {
@@ -79,21 +73,15 @@
     private static final String DIST_VOL_NAME = "dist-vol";
 
     @Mock
-    private EJBUtilsStrategy mockLookupStrategy;
-
-    @Mock
-    private TransactionManager mockTxnManager;
-
-    @Mock
-    private Transaction mockTxn;
-
-    @Mock
     private ClusterUtils clusterUtils;
 
     @Rule
     public MockConfigRule mcr = new MockConfigRule(
             mockConfig(ConfigValues.GlusterRefreshRateLight, 5),
             mockConfig(ConfigValues.GlusterRefreshRateHeavy, 300));
+
+    @Rule
+    public MockEJBStrategyRule ejbRule = new MockEJBStrategyRule();
 
     private GlusterManager glusterManager;
 
@@ -218,8 +206,6 @@
 
     private void setupMocks() throws Exception {
         glusterManager = Mockito.spy(GlusterManager.getInstance());
-
-        mockTransactionManager();
         mockDaos();
 
         doReturn(clusterUtils).when(glusterManager).getClusterUtils();
@@ -421,17 +407,6 @@
                 return addedBrickIds.contains(((GlusterBrickEntity) 
argument).getId());
             }
         };
-    }
-
-    private void mockTransactionManager() throws Exception {
-        EjbUtils.setStrategy(mockLookupStrategy);
-        doReturn(mockTxnManager).when(mockLookupStrategy)
-                
.findResource(ContainerManagedResourceType.TRANSACTION_MANAGER);
-        doReturn(null).when(mockTxnManager).getTransaction();
-        doNothing().when(mockTxnManager).begin();
-        doReturn(mockTxn).when(mockTxnManager).getTransaction();
-        doReturn(Status.STATUS_COMMITTED).when(mockTxn).getStatus();
-        doNothing().when(mockTxnManager).commit();
     }
 
     private GlusterVolumeAdvancedDetails 
getVolumeAdvancedDetails(GlusterVolumeEntity volume) {
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lock/InMemoryLockManagerTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lock/InMemoryLockManagerTest.java
index bdb9c1d..201da5a 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lock/InMemoryLockManagerTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lock/InMemoryLockManagerTest.java
@@ -2,21 +2,17 @@
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.core.utils.ejb.BeanProxyType;
+import org.ovirt.engine.core.utils.MockEJBStrategyRule;
 import org.ovirt.engine.core.utils.ejb.BeanType;
-import org.ovirt.engine.core.utils.ejb.EJBUtilsStrategy;
-import org.ovirt.engine.core.utils.ejb.EjbUtils;
 import org.ovirt.engine.core.utils.lock.EngineLock;
-import org.ovirt.engine.core.utils.lock.LockManager;
 import org.ovirt.engine.core.utils.lock.LockManagerFactory;
 
 public class InMemoryLockManagerTest {
@@ -28,11 +24,13 @@
     private EngineLock updateAndLockLock;
     private String updateGuid;
     private String lockGuid;
-    private InMemoryLockManager lockMager;
+    private InMemoryLockManager lockMager = new InMemoryLockManager();
+
+    @Rule
+    public MockEJBStrategyRule mockEjbRule = new 
MockEJBStrategyRule(BeanType.LOCK_MANAGER, lockMager);
 
     @Before
     public void setup() {
-        mockLockManager();
         updateGuid = Guid.NewGuid().toString();
         lockGuid = Guid.NewGuid().toString();
         Map<String, String> updateRegionsMap = new HashMap<String, String>();
@@ -50,14 +48,6 @@
         updateAndLockLock = new EngineLock();
         updateAndLockLock.setSharedLocks(updateRegionsMap);
         updateAndLockLock.setExclusiveLocks(lockedRegionsMap);
-    }
-
-    private void mockLockManager() {
-        lockMager = new InMemoryLockManager();
-        EJBUtilsStrategy ejbStrategy = mock(EJBUtilsStrategy.class);
-        when(ejbStrategy.<LockManager> findBean(BeanType.LOCK_MANAGER, 
BeanProxyType.LOCAL))
-                .thenReturn(lockMager);
-        EjbUtils.setStrategy(ejbStrategy);
     }
 
     @Test
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommandTest.java
index 90515d2..bf714a3 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommandTest.java
@@ -11,13 +11,13 @@
 
 import java.util.ArrayList;
 
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.runners.MockitoJUnitRunner;
 import org.mockito.stubbing.Answer;
-import org.ovirt.engine.core.bll.ExecuteTransactionAnswer;
 import org.ovirt.engine.core.bll.context.CommandContext;
 import org.ovirt.engine.core.bll.context.CompensationContext;
 import org.ovirt.engine.core.bll.interfaces.BackendInternal;
@@ -30,8 +30,8 @@
 import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
-import org.ovirt.engine.core.common.businessentities.storage_domains;
 import org.ovirt.engine.core.common.businessentities.storage_domain_static;
+import org.ovirt.engine.core.common.businessentities.storage_domains;
 import org.ovirt.engine.core.common.businessentities.storage_pool;
 import org.ovirt.engine.core.common.businessentities.storage_pool_iso_map;
 import org.ovirt.engine.core.common.interfaces.VDSBrokerFrontend;
@@ -39,14 +39,13 @@
 import org.ovirt.engine.core.common.vdscommands.VDSParametersBase;
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
 import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.core.compat.TransactionScopeOption;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dao.StorageDomainDAO;
 import org.ovirt.engine.core.dao.StorageDomainStaticDAO;
 import org.ovirt.engine.core.dao.StoragePoolDAO;
 import org.ovirt.engine.core.dao.StoragePoolIsoMapDAO;
 import org.ovirt.engine.core.dao.VdsDAO;
-import org.ovirt.engine.core.utils.transaction.TransactionMethod;
+import org.ovirt.engine.core.utils.MockEJBStrategyRule;
 
 @RunWith(MockitoJUnitRunner.class)
 public class AttachStorageDomainToPoolCommandTest {
@@ -69,6 +68,9 @@
     @Mock
     private VDS vds;
     storage_pool_iso_map map = null;
+
+    @Rule
+    public MockEJBStrategyRule mockEjbRule = new MockEJBStrategyRule();
 
     @Test
     public void statusSetInMap() {
@@ -110,10 +112,6 @@
                 return null;
             }
         }).when(isoMapDAO).save(any(storage_pool_iso_map.class));
-
-        doAnswer(new 
ExecuteTransactionAnswer(0)).when(cmd).executeInNewTransaction(any(TransactionMethod.class));
-        doAnswer(new 
ExecuteTransactionAnswer(1)).when(cmd).executeInScope(any(TransactionScopeOption.class),
-                any(TransactionMethod.class));
 
         cmd.setCompensationContext(mock(CompensationContext.class));
         cmd.executeCommand();
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommandTest.java
index f6ef11b..1c92a38 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommandTest.java
@@ -2,7 +2,6 @@
 
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
@@ -10,11 +9,11 @@
 
 import java.util.ArrayList;
 
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
-import org.ovirt.engine.core.bll.ExecuteTransactionAnswer;
 import org.ovirt.engine.core.bll.context.CompensationContext;
 import org.ovirt.engine.core.bll.interfaces.BackendInternal;
 import org.ovirt.engine.core.common.action.StorageDomainPoolParametersBase;
@@ -30,14 +29,13 @@
 import org.ovirt.engine.core.common.vdscommands.VDSParametersBase;
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
 import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.core.compat.TransactionScopeOption;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dao.AsyncTaskDAO;
 import org.ovirt.engine.core.dao.StorageDomainDAO;
 import org.ovirt.engine.core.dao.StoragePoolDAO;
 import org.ovirt.engine.core.dao.StoragePoolIsoMapDAO;
 import org.ovirt.engine.core.dao.VdsDAO;
-import org.ovirt.engine.core.utils.transaction.TransactionMethod;
+import org.ovirt.engine.core.utils.MockEJBStrategyRule;
 
 @RunWith(MockitoJUnitRunner.class)
 public class DeactivateStorageDomainCommandTest {
@@ -62,6 +60,9 @@
     private VDS vds;
     storage_pool_iso_map map = new storage_pool_iso_map();
 
+    @Rule
+    public MockEJBStrategyRule mockEjbRule = new MockEJBStrategyRule();
+
     @Test
     public void statusSetInMap() {
         StorageDomainPoolParametersBase params = new 
StorageDomainPoolParametersBase(Guid.NewGuid(), Guid.NewGuid());
@@ -79,10 +80,6 @@
         when(storagePoolDAO.get(any(Guid.class))).thenReturn(new 
storage_pool());
         when(isoMapDAO.get(any(StoragePoolIsoMapId.class))).thenReturn(map);
         when(storageDomainDAO.getForStoragePool(any(Guid.class), 
any(Guid.class))).thenReturn(new storage_domains());
-
-        doAnswer(new 
ExecuteTransactionAnswer(0)).when(cmd).executeInNewTransaction(any(TransactionMethod.class));
-        doAnswer(new 
ExecuteTransactionAnswer(1)).when(cmd).executeInScope(any(TransactionScopeOption.class),
-                any(TransactionMethod.class));
 
         doReturn(backendInternal).when(cmd).getBackend();
         when(vdsDAO.getAllForStoragePoolAndStatus(any(Guid.class), 
any(VDSStatus.class))).thenReturn(new ArrayList<VDS>());
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/RemoveStorageDomainTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/RemoveStorageDomainTest.java
index 9157c13..067c80b 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/RemoveStorageDomainTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/RemoveStorageDomainTest.java
@@ -3,7 +3,6 @@
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
@@ -17,9 +16,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.invocation.InvocationOnMock;
 import org.mockito.runners.MockitoJUnitRunner;
-import org.mockito.stubbing.Answer;
 import org.ovirt.engine.core.bll.interfaces.BackendInternal;
 import 
org.ovirt.engine.core.common.action.DetachStorageDomainFromPoolParameters;
 import org.ovirt.engine.core.common.action.RemoveStorageDomainParameters;
@@ -52,7 +49,7 @@
 import org.ovirt.engine.core.dao.StoragePoolIsoMapDAO;
 import org.ovirt.engine.core.dao.VdsDAO;
 import org.ovirt.engine.core.utils.MockConfigRule;
-import org.ovirt.engine.core.utils.transaction.TransactionMethod;
+import org.ovirt.engine.core.utils.MockEJBStrategyRule;
 
 @RunWith(MockitoJUnitRunner.class)
 public class RemoveStorageDomainTest {
@@ -65,6 +62,9 @@
                             VDS_COMPATIBILITY_VERSION.getValue(),
                             true)
             );
+
+    @Rule
+    public MockEJBStrategyRule mockEjbRule = new MockEJBStrategyRule();
 
     private final Guid STORAGE_DOMAIN_ID = Guid.NewGuid();
     private final Guid STORAGE_POOL_ID = Guid.NewGuid();
@@ -81,14 +81,6 @@
                 spy(new 
RemoveStorageDomainCommand<RemoveStorageDomainParameters>(getParams(format)));
         doReturn(db).when(cmd).getDbFacade();
         doReturn(backend).when(cmd).getBackend();
-        doAnswer(new Answer<Object>() {
-
-            @Override
-            public Object answer(InvocationOnMock invocation) throws Throwable 
{
-                return ((TransactionMethod<?>) 
invocation.getArguments()[0]).runInTransaction();
-            }
-
-        }).when(cmd).executeInNewTransaction(any(TransactionMethod.class));
         return cmd;
     }
 
diff --git 
a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/MockEJBStrategyRule.java
 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/MockEJBStrategyRule.java
new file mode 100644
index 0000000..74a7fa1
--- /dev/null
+++ 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/MockEJBStrategyRule.java
@@ -0,0 +1,85 @@
+package org.ovirt.engine.core.utils;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Collections;
+import java.util.EnumMap;
+import java.util.Map;
+
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+
+import org.junit.Assert;
+import org.junit.rules.TestWatchman;
+import org.junit.runners.model.FrameworkMethod;
+import org.ovirt.engine.core.utils.ejb.BeanProxyType;
+import org.ovirt.engine.core.utils.ejb.BeanType;
+import org.ovirt.engine.core.utils.ejb.ContainerManagedResourceType;
+import org.ovirt.engine.core.utils.ejb.EJBUtilsStrategy;
+import org.ovirt.engine.core.utils.ejb.EjbUtils;
+
+/**
+ * This rule is used to mock EJB bean loading in oVirt Engine classes 
(accessed via {@link EjbUtils}, without having to resort to Power Mocking.
+ * Since most classes that use {@link EjbUtils} rely on it for transaction 
management services, they are mocked by default.
+ * Additional bean may be mocked either by passing the mocks during the rule's 
construction or by calling {@link #mockBean(BeanType, Object)}.
+ *
+ * To use it, simple add a {@link MockEJBStrategyRule} member to your test, 
with the {@link @Rule} annotation.
+ */
+public class MockEJBStrategyRule extends TestWatchman {
+
+    private EJBUtilsStrategy origStrategy;
+    private EJBUtilsStrategy mockStrategy;
+    private Map<BeanType, Object> mockBeanMap;
+
+    /** Create the rule with no mocking */
+    public MockEJBStrategyRule() {
+        this(new EnumMap<BeanType, Object>(BeanType.class));
+    }
+
+    /** Create the rule with with a mock of a single bean */
+    public MockEJBStrategyRule(BeanType type, Object bean) {
+        this(new EnumMap<BeanType, Object>(Collections.singletonMap(type, 
bean)));
+    }
+
+    /** Create the rule with with a mock of a several beans */
+    public MockEJBStrategyRule(Map<BeanType, Object> beans) {
+        mockBeanMap = beans;
+        origStrategy = EjbUtils.getStrategy();
+        mockStrategy = mock(EJBUtilsStrategy.class);
+        EjbUtils.setStrategy(mockStrategy);
+    }
+
+    private void mockTransactionManagement() throws SystemException {
+        Transaction trans = mock(Transaction.class);
+        TransactionManager tm = mock(TransactionManager.class);
+        doReturn(trans).when(tm).getTransaction();
+        doReturn(tm).when(mockStrategy)
+                .<TransactionManager> 
findResource(ContainerManagedResourceType.TRANSACTION_MANAGER);
+    }
+
+    public void mockBean(BeanType type, Object bean) {
+        mockBeanMap.put(type, bean);
+    }
+
+    @Override
+    public void starting(FrameworkMethod method) {
+        try {
+            mockTransactionManagement();
+            for (Map.Entry<BeanType, Object> mockBeanEntry : 
mockBeanMap.entrySet()) {
+                when(mockStrategy.findBean(eq(mockBeanEntry.getKey()), 
any(BeanProxyType.class))).thenReturn(mockBeanEntry.getValue());
+            }
+        } catch (SystemException e) {
+            Assert.fail("Unable to mock tranaction management");
+        }
+    }
+
+    @Override
+    public void finished(FrameworkMethod method) {
+        EjbUtils.setStrategy(origStrategy);
+    }
+}
diff --git 
a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
 
b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
index e661200..c7f0eab 100644
--- 
a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
+++ 
b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
@@ -4,17 +4,14 @@
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
-import static org.ovirt.engine.core.utils.MockConfigRule.mockConfig;
 
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import javax.transaction.TransactionManager;
-
-import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -25,7 +22,6 @@
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VmDevice;
-import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
@@ -33,33 +29,20 @@
 import org.ovirt.engine.core.dao.VdsGroupDAO;
 import org.ovirt.engine.core.dao.VmDAO;
 import org.ovirt.engine.core.dao.VmDeviceDAO;
-import org.ovirt.engine.core.utils.MockConfigRule;
-import org.ovirt.engine.core.utils.ejb.ContainerManagedResourceType;
-import org.ovirt.engine.core.utils.ejb.EJBUtilsStrategy;
-import org.ovirt.engine.core.utils.ejb.EjbUtils;
+import org.ovirt.engine.core.utils.MockEJBStrategyRule;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.VdsProperties;
 import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcStruct;
 
 @RunWith(MockitoJUnitRunner.class)
 public class VdsUpdateRunTimeInfoTest {
-    public static MockConfigRule mcr = new MockConfigRule(
-            mockConfig(ConfigValues.VdsLocalDisksLowFreeSpace, 0),
-            mockConfig(ConfigValues.VdsLocalDisksCriticallyLowFreeSpace, 0),
-            mockConfig(ConfigValues.VdsRefreshRate, 3000),
-            mockConfig(ConfigValues.TimeToReduceFailedRunOnVdsInMinutes, 30),
-            mockConfig(ConfigValues.VdsRecoveryTimeoutInMintues, 3)
-            );
+
+    @Rule
+    public MockEJBStrategyRule mockEjbRule = new MockEJBStrategyRule();
 
     private VDS vds;
     XmlRpcStruct[] vmInfo;
 
     VdsUpdateRunTimeInfo updater;
-
-    @Mock
-    EjbUtils ejbUtils;
-
-    @Mock
-    TransactionManager tm;
 
     @Mock
     VdsGroupDAO groupDAO;
@@ -78,15 +61,9 @@
 
     AuditLogDAO mockAuditLogDao = new AuditLogDaoMocker();
 
-    @Mock
-    EJBUtilsStrategy mockStrategy;
-
-    private EJBUtilsStrategy origEjbStrategy;
-
     @Before
     public void setup() {
         initVds();
-        mockEjbStrategy();
         initConditions();
         updater = new VdsUpdateRunTimeInfo(null, vds) {
 
@@ -161,16 +138,5 @@
         vds = new VDS();
         
vds.setId(Guid.createGuidFromString("00000000-0000-0000-0000-000000000012"));
 
-    }
-
-    public void mockEjbStrategy() {
-        origEjbStrategy = EjbUtils.getStrategy();
-        EjbUtils.setStrategy(mockStrategy);
-        
when(mockStrategy.findResource(ContainerManagedResourceType.TRANSACTION_MANAGER)).thenReturn(tm);
-    }
-
-    @After
-    public void unmockEjbStrategy() {
-        EjbUtils.setStrategy(origEjbStrategy);
     }
 }


--
To view, visit http://gerrit.ovirt.org/9401
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib0ae1b2c56f2b189729883bf34da9a295a8ae9d6
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Allon Mureinik <amure...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to