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