Tal Nisan has uploaded a new change for review. Change subject: core: Add tests to StorageHandlingCommandBaseTest ......................................................................
core: Add tests to StorageHandlingCommandBaseTest Since the removal of DC type it's important to have test to test the logic of whether attachment of domains to a pool is allowed, this patch adds tests for the StorageHandlingCommandBase which holds most of the logic that determines attachment is allowed Change-Id: I97e45957f7ff0fe4c9e7d88e0d8dbab7e874c79b Signed-off-by: Tal Nisan <[email protected]> Relates-To: https://bugzilla.redhat.com/1038053 --- M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CanDoActionTestUtils.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/StorageHandlingCommandBaseTest.java 2 files changed, 212 insertions(+), 18 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/60/23960/1 diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CanDoActionTestUtils.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CanDoActionTestUtils.java index 03c6f94..c31f4b3 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CanDoActionTestUtils.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CanDoActionTestUtils.java @@ -99,7 +99,7 @@ return command.getReturnValue().getCanDoActionMessages(); } - private static List<String> assertCanDoActionMessages(String assertionMessage, + public static List<String> assertCanDoActionMessages(String assertionMessage, CommandBase<?> command, VdcBllMessages message) { List<String> canDoActionMessages = command.getReturnValue().getCanDoActionMessages(); diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/StorageHandlingCommandBaseTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/StorageHandlingCommandBaseTest.java index 0e76c5a..52e5271 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/StorageHandlingCommandBaseTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/StorageHandlingCommandBaseTest.java @@ -3,38 +3,90 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; 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.ArrayList; +import java.util.Arrays; +import java.util.List; import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.ovirt.engine.core.bll.CanDoActionTestUtils; import org.ovirt.engine.core.common.action.StoragePoolManagementParameter; +import org.ovirt.engine.core.common.businessentities.StorageDomain; +import org.ovirt.engine.core.common.businessentities.StorageDomainSharedStatus; +import org.ovirt.engine.core.common.businessentities.StorageDomainType; +import org.ovirt.engine.core.common.businessentities.StorageFormatType; import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap; +import org.ovirt.engine.core.common.businessentities.StorageType; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.dal.dbbroker.DbFacade; +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.utils.MockConfigRule; +@RunWith(MockitoJUnitRunner.class) public class StorageHandlingCommandBaseTest { - @ClassRule - public static MockConfigRule mcr = new MockConfigRule(); - StorageHandlingCommandBase<StoragePoolManagementParameter> cmd; - StoragePoolDAO dao; + + @Mock + StoragePoolDAO storagePoolDAO; + + @Mock DbFacade facade; + + @Mock + StorageDomainDAO storageDomainDAO; + + @Mock + private StoragePoolIsoMapDAO storagePoolIsoMapDAO; + + List<StorageDomain> attachedDomains = new ArrayList<StorageDomain>(); + + StoragePool storagePool; + List<StoragePoolIsoMap> isoMap = new ArrayList<>(); + + @ClassRule + public static MockConfigRule mcr = new MockConfigRule( + // Indicates a supported storage format of V2 & V3 in version 3.4 + mockConfig(ConfigValues.SupportedStorageFormats, Version.v3_0.toString(), "0,1"), + mockConfig(ConfigValues.SupportedStorageFormats, Version.v3_2.toString(), "3"), + mockConfig(ConfigValues.SupportedStorageFormats, Version.v3_4.toString(), "3"), + mockConfig(ConfigValues.GlusterFsStorageEnabled, Version.v3_0.toString(), false), + mockConfig(ConfigValues.GlusterFsStorageEnabled, Version.v3_4.toString(), true), + mockConfig(ConfigValues.PosixStorageEnabled, Version.v3_0.toString(), false), + mockConfig(ConfigValues.PosixStorageEnabled, Version.v3_4.toString(), true) + ); @Before public void setUp() { - facade = mock(DbFacade.class); + storagePool = createStoragePool(Version.v3_4); - dao = mock(StoragePoolDAO.class); - cmd = new TestStorageHandlingCommandBase(new StoragePoolManagementParameter(createStoragePool())); + initCommand(); - when(facade.getStoragePoolDao()).thenReturn(dao); + when(facade.getStoragePoolDao()).thenReturn(storagePoolDAO); + when(facade.getStoragePoolDao().get(storagePool.getId())).thenReturn(storagePool); + + when(facade.getStorageDomainDao()).thenReturn(storageDomainDAO); + when(storageDomainDAO.getAllForStoragePool(storagePool.getId())).thenReturn(attachedDomains); + + when(facade.getStoragePoolIsoMapDao()).thenReturn(storagePoolIsoMapDAO); + when(storagePoolIsoMapDAO.getAllForStorage(any(Guid.class))).thenReturn(isoMap); + } + + public void initCommand() { + cmd = new TestStorageHandlingCommandBase(new StoragePoolManagementParameter(storagePool)); } @Test @@ -50,36 +102,182 @@ @Test public void storagePoolExists() { - createValidStoragePool(); checkStoragePoolSucceeds(); } @Test public void nameTooLong() { - createValidStoragePool(); setAcceptableNameLength(10); checkStoragePoolNameLengthSucceeds(); } @Test public void nameAcceptableLength() { - createValidStoragePool(); setAcceptableNameLength(255); checkStoragePoolNameLengthFails(); + } + + + + private StorageDomain createValidStorageDomain() { + StorageDomain storageDomain = new StorageDomain(); + storageDomain.setId(Guid.newGuid()); + storageDomain.setStorageFormat(StorageFormatType.V3); + return storageDomain; + } + + @Test + public void testAttachOnValidDomain() { + StorageDomain storageDomain = createValidStorageDomain(); + assertTrue("Attaching a valid domain to attach was failed", cmd.checkDomainCanBeAttached(storageDomain)); + } + + /** + * Mixed types are not allowed on V3.0, test that attempting to attach a domain of different type than what already + * exists in the data center will fail + */ + @Test + public void testMixedTypesUnsupported() { + storagePool.setcompatibility_version(Version.v3_0); + + StorageDomain existingStorageDomain = createValidStorageDomain(); + existingStorageDomain.setStorageType(StorageType.NFS); + addDomainToPool(existingStorageDomain); + + StorageDomain domainToAttach = createValidStorageDomain(); + domainToAttach.setStorageFormat(StorageFormatType.V1); + existingStorageDomain.setStorageType(StorageType.NFS); + assertTrue("Attaching an NFS domain to a pool with NFS domain with no mixed type allowed failed", cmd.checkDomainCanBeAttached(domainToAttach)); + + domainToAttach.setStorageType(StorageType.ISCSI); + initCommand(); + assertFalse("Attaching an ISCSI domain to a pool with NFS domain with no mixed type allowed succeeded", cmd.checkDomainCanBeAttached(domainToAttach)); + CanDoActionTestUtils.assertCanDoActionMessages("Attaching an ISCSI domain to a pool with NFS domain with no mixed type failed with the wrong message", cmd, + VdcBllMessages.ACTION_TYPE_FAILED_MIXED_STORAGE_TYPES_NOT_ALLOWED); + + } + + @Test + public void testAttachPosixCompatibility() { + StorageDomain storageDomain = createValidStorageDomain(); + + storageDomain.setStorageType(StorageType.POSIXFS); + assertTrue("Attaching a POSIX domain failed while it should have succeeded", cmd.checkDomainCanBeAttached(storageDomain)); + + storagePool.setcompatibility_version(Version.v3_0); + storageDomain.setStorageFormat(StorageFormatType.V1); + + initCommand(); + storageDomain.setStorageType(StorageType.POSIXFS); + assertFalse("Attaching a POSIX domain succeeded while it should have failed", cmd.checkDomainCanBeAttached(storageDomain)); + CanDoActionTestUtils.assertCanDoActionMessages("Attaching a POSIX domain failed with the wrong message", cmd, + VdcBllMessages.DATA_CENTER_POSIX_STORAGE_NOT_SUPPORTED_IN_CURRENT_VERSION); + + + } + + @Test + public void testAttachGlusterCompatibility() { + StorageDomain storageDomain = createValidStorageDomain(); + storageDomain.setStorageType(StorageType.GLUSTERFS); + assertTrue("Attaching a GLUSTER domain failed while it should have succeeded", cmd.checkDomainCanBeAttached(storageDomain)); + + storagePool.setcompatibility_version(Version.v3_0); + storageDomain.setStorageFormat(StorageFormatType.V1); + + initCommand(); + storageDomain.setStorageType(StorageType.GLUSTERFS); + assertFalse("Attaching a GLUSTER domain succeeded while it should have failed", cmd.checkDomainCanBeAttached(storageDomain)); + CanDoActionTestUtils.assertCanDoActionMessages("Attaching a GLUSTER domain failed failed with the wrong message", cmd, + VdcBllMessages.DATA_CENTER_GLUSTER_STORAGE_NOT_SUPPORTED_IN_CURRENT_VERSION); + } + + @Test + public void testAttachFailDomainTypeIncorrect() { + StorageDomain storageDomain = createValidStorageDomain(); + storageDomain.setStorageType(StorageType.LOCALFS); + assertFalse("Attaching domain with an incorrect type succeeded while it should have failed", cmd.checkDomainCanBeAttached(storageDomain)); + CanDoActionTestUtils.assertCanDoActionMessages("Attaching domain with an incorrect type failed with the wrong message", cmd, + VdcBllMessages.ERROR_CANNOT_ATTACH_STORAGE_DOMAIN_STORAGE_TYPE_NOT_MATCH); + } + + @Test + public void testAttachFailDomainAlreadyInPool() { + StorageDomain storageDomain = createValidStorageDomain(); + isoMap.add(new StoragePoolIsoMap()); + assertFalse("Attaching domain that is already in a pool succeeded while it should have failed", cmd.checkDomainCanBeAttached(storageDomain)); + CanDoActionTestUtils.assertCanDoActionMessages("Attaching domain that is already in a pool failed with the wrong message", cmd, + VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_STATUS_ILLEGAL); + } + + + @Test + public void testAttachFailLockDomain() { + StorageDomain storageDomain = createValidStorageDomain(); + storageDomain.setStorageDomainSharedStatus(StorageDomainSharedStatus.Locked); + assertFalse("Attaching domain in locked status succeeded while it should have failed", cmd.checkDomainCanBeAttached(storageDomain)); + CanDoActionTestUtils.assertCanDoActionMessages("Attaching domain with in locked status failed with the wrong message", cmd, + VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_STATUS_ILLEGAL); + } + + @Test + public void testAttachFailFormatType() { + StorageDomain domainToAttach = createValidStorageDomain(); + domainToAttach.setStorageFormat(StorageFormatType.V2); + assertFalse("Attaching domain with unsupported version succeeded while it should have failed", cmd.checkDomainCanBeAttached(domainToAttach)); + CanDoActionTestUtils.assertCanDoActionMessages("Attaching domain with unsupported version failed with the wrong message", cmd, + VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_FORMAT_ILLEGAL); + } + + @Test + public void testCanAttachISOOrExport() { + for (StorageDomainType type : Arrays.<StorageDomainType> asList(StorageDomainType.ISO, StorageDomainType.ImportExport)) { + StorageDomain storageDomainToAttach = createValidStorageDomain(); + storageDomainToAttach.setStorageDomainType(type); + testCanAttachWithISOOrExport(storageDomainToAttach); + } + } + + /** + * Tests attaching an ISO/Export domain to a pool first to a pool without an ISO/Export domain attached (should succeed) + * then to a pool with an ISO/Export domain attached (should fail) + */ + private void testCanAttachWithISOOrExport(StorageDomain domainToAttach) { + assertTrue("Attaching domain of type " + domainToAttach.getStorageDomainType() + " failed while it should have succeed", + cmd.checkDomainCanBeAttached(domainToAttach)); + + StorageDomain existingDomain = createValidStorageDomain(); + existingDomain.setStorageDomainType(domainToAttach.getStorageDomainType()); + addDomainToPool(existingDomain); + assertFalse("Attaching domain of type " + domainToAttach.getStorageDomainType() + " succeeded while it should have failed", + cmd.checkDomainCanBeAttached(domainToAttach)); + CanDoActionTestUtils.assertCanDoActionMessages("Attaching domain of type " + domainToAttach.getStorageDomainType() + + " succeeded though another domain" + + "of the same type already exists in the pool", cmd, + domainToAttach.getStorageDomainType() == StorageDomainType.ISO ? VdcBllMessages.ERROR_CANNOT_ATTACH_MORE_THAN_ONE_ISO_DOMAIN : + VdcBllMessages.ERROR_CANNOT_ATTACH_MORE_THAN_ONE_EXPORT_DOMAIN); + + } + + private void addDomainToPool(StorageDomain storageDomain) { + attachedDomains.add(storageDomain); } private void checkStoragePoolSucceeds() { assertTrue(cmd.checkStoragePool()); } - private static StoragePool createStoragePool() { + private static StoragePool createStoragePool(Version compatibilityVersion) { StoragePool pool = new StoragePool(); pool.setName("DefaultStoragePool"); pool.setId(Guid.newGuid()); + pool.setIsLocal(false); + pool.setcompatibility_version(compatibilityVersion); return pool; } private void checkStoragePoolFails() { + when(facade.getStoragePoolDao().get(storagePool.getId())).thenReturn(null); assertFalse(cmd.checkStoragePool()); assertTrue(cmd.getReturnValue().getCanDoActionMessages().contains(VdcBllMessages .ACTION_TYPE_FAILED_STORAGE_POOL_NOT_EXIST.toString())); @@ -87,10 +285,6 @@ private void createCommandWithNullPool() { cmd = new TestStorageHandlingCommandBase(new StoragePoolManagementParameter()); - } - - private void createValidStoragePool() { - when(dao.get(any(Guid.class))).thenReturn(createStoragePool()); } private static void setAcceptableNameLength(final int length) { -- To view, visit http://gerrit.ovirt.org/23960 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I97e45957f7ff0fe4c9e7d88e0d8dbab7e874c79b Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.4 Gerrit-Owner: Tal Nisan <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
