Maor Lipchuk has uploaded a new change for review. Change subject: core: Add vdc query for import Block Storage Domain ......................................................................
core: Add vdc query for import Block Storage Domain Add vdc query for validating that the block Storage Domain is not attached to another Data Center. The validation is being done on the Storage Domain metadata which contains the storage pool id. The Query only fetches the storage domain info and does not perform connect or disconnect, to prevent a scenario of disconnecting an exisitng Storage Domains. Change-Id: Id93a96ad7fdad3305f3f2254f67f476c1e989b6f Bug-Url: https://bugzilla.redhat.com/1138115 Signed-off-by: Maor Lipchuk <[email protected]> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetBlockStorageDomainsWithAttachedStoragePoolGuidQuery.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetBlockStorageDomainsWithAttachedStoragePoolGuidQueryTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java 3 files changed, 188 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/78/36478/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetBlockStorageDomainsWithAttachedStoragePoolGuidQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetBlockStorageDomainsWithAttachedStoragePoolGuidQuery.java new file mode 100644 index 0000000..a6599c5 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetBlockStorageDomainsWithAttachedStoragePoolGuidQuery.java @@ -0,0 +1,22 @@ +package org.ovirt.engine.core.bll.storage; + +import java.util.ArrayList; +import java.util.List; + +import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; +import org.ovirt.engine.core.common.queries.StorageDomainsAndStoragePoolIdQueryParameters; + +public class GetBlockStorageDomainsWithAttachedStoragePoolGuidQuery<P extends StorageDomainsAndStoragePoolIdQueryParameters> extends GetStorageDomainsWithAttachedStoragePoolGuidQuery<P> { + public GetBlockStorageDomainsWithAttachedStoragePoolGuidQuery(P parameters) { + super(parameters); + } + + @Override + protected List<StorageDomainStatic> filterAttachedStorageDomains() { + List<StorageDomainStatic> storageDomainStaticList = new ArrayList<>(); + if (getParameters().getStorageDomainList() != null) { + storageDomainStaticList = getAttachedStorageDomains(getParameters().getStorageDomainList()); + } + return storageDomainStaticList; + } +} diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetBlockStorageDomainsWithAttachedStoragePoolGuidQueryTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetBlockStorageDomainsWithAttachedStoragePoolGuidQueryTest.java new file mode 100644 index 0000000..27f552f --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetBlockStorageDomainsWithAttachedStoragePoolGuidQueryTest.java @@ -0,0 +1,165 @@ +package org.ovirt.engine.core.bll.storage; + +import static junit.framework.TestCase.assertEquals; +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.ArrayList; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.ovirt.engine.core.bll.AbstractQueryTest; +import org.ovirt.engine.core.common.businessentities.StorageDomain; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; +import org.ovirt.engine.core.common.businessentities.StorageType; +import org.ovirt.engine.core.common.businessentities.VDS; +import org.ovirt.engine.core.common.businessentities.VDSStatus; +import org.ovirt.engine.core.common.interfaces.VDSBrokerFrontend; +import org.ovirt.engine.core.common.queries.StorageDomainsAndStoragePoolIdQueryParameters; +import org.ovirt.engine.core.common.utils.Pair; +import org.ovirt.engine.core.common.vdscommands.HSMGetStorageDomainInfoVDSCommandParameters; +import org.ovirt.engine.core.common.vdscommands.VDSCommandType; +import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.VdsDAO; + +public class GetBlockStorageDomainsWithAttachedStoragePoolGuidQueryTest extends + AbstractQueryTest<StorageDomainsAndStoragePoolIdQueryParameters, GetFileStorageDomainsWithAttachedStoragePoolGuidQuery<StorageDomainsAndStoragePoolIdQueryParameters>> { + @Mock + private VDSBrokerFrontend vdsBrokerFrontendMock; + + private StorageDomain storageDomain; + + @Before + public void initMocking() { + storageDomain = new StorageDomain(); + storageDomain.setStorageName("Name of Storage"); + storageDomain.setStorageType(StorageType.ISCSI); + + VDS vds = new VDS(); + vds.setId(Guid.newGuid()); + VdsDAO vdsDAOMock = mock(VdsDAO.class); + List<VDS> listVds = new ArrayList<>(); + listVds.add(vds); + when(vdsDAOMock.getAllForStoragePoolAndStatus(any(Guid.class), eq(VDSStatus.Up))).thenReturn(listVds); + when(getDbFacadeMockInstance().getVdsDao()).thenReturn(vdsDAOMock); + VDSBrokerFrontend vdsBrokerFrontendMock = mock(VDSBrokerFrontend.class); + doReturn(vdsBrokerFrontendMock).when(getQuery()).getVdsBroker(); + } + + @Test + public void testAttachedStorageDomainWithStorageDomainsParameterQuery() { + mockVdsCommand(); + + // Create parameters + List<StorageDomain> storageDomainList = new ArrayList<>(); + storageDomainList.add(storageDomain); + StorageDomainsAndStoragePoolIdQueryParameters paramsMock = getQueryParameters(); + when(paramsMock.getStorageDomainList()).thenReturn(storageDomainList); + + // Run 'HSMGetStorageDomainInfo' command + VDSReturnValue returnValue = new VDSReturnValue(); + returnValue.setSucceeded(true); + + Pair<StorageDomainStatic, Guid> storageDomainToPoolId = new Pair<>(storageDomain.getStorageStaticData(), Guid.newGuid()); + returnValue.setReturnValue(storageDomainToPoolId); + when(vdsBrokerFrontendMock.RunVdsCommand(eq(VDSCommandType.HSMGetStorageDomainInfo), + any(HSMGetStorageDomainInfoVDSCommandParameters.class))).thenReturn(returnValue); + + // Execute command + getQuery().executeQueryCommand(); + + // Assert the query's results + List<StorageDomainStatic> returnedStorageDomainList = new ArrayList<>(); + returnedStorageDomainList.add(storageDomain.getStorageStaticData()); + assertEquals(returnedStorageDomainList, getQuery().getQueryReturnValue().getReturnValue()); + } + + @Test + public void testUnattachedStorageDomainWithStorageDomainsParameterQuery() { + mockVdsCommand(); + + // Create parameters + List<StorageDomain> storageDomainList = new ArrayList<>(); + storageDomainList.add(storageDomain); + StorageDomainsAndStoragePoolIdQueryParameters paramsMock = getQueryParameters(); + when(paramsMock.getStorageDomainList()).thenReturn(storageDomainList); + + // Run 'HSMGetStorageDomainInfo' command + VDSReturnValue returnValue = new VDSReturnValue(); + returnValue.setSucceeded(true); + + Pair<StorageDomainStatic, Guid> storageDomainToPoolId = new Pair<>(storageDomain.getStorageStaticData(), null); + returnValue.setReturnValue(storageDomainToPoolId); + when(vdsBrokerFrontendMock.RunVdsCommand(eq(VDSCommandType.HSMGetStorageDomainInfo), + any(HSMGetStorageDomainInfoVDSCommandParameters.class))).thenReturn(returnValue); + + // Execute command + getQuery().executeQueryCommand(); + + // Assert the query's results + List<StorageDomainStatic> returnedStorageDomainList = new ArrayList<>(); + assertEquals(returnedStorageDomainList, getQuery().getQueryReturnValue().getReturnValue()); + } + + @Test + public void testEmptyStorageDomainListQuery() { + mockVdsCommand(); + + // Create parameters + List<StorageDomain> storageDomainList = new ArrayList<>(); + StorageDomainsAndStoragePoolIdQueryParameters paramsMock = getQueryParameters(); + when(paramsMock.getStorageDomainList()).thenReturn(storageDomainList); + + // Run 'HSMGetStorageDomainInfo' command + VDSReturnValue returnValue = new VDSReturnValue(); + returnValue.setSucceeded(true); + + Pair<StorageDomainStatic, Guid> storageDomainToPoolId = new Pair<>(storageDomain.getStorageStaticData(), Guid.newGuid()); + returnValue.setReturnValue(storageDomainToPoolId); + when(vdsBrokerFrontendMock.RunVdsCommand(eq(VDSCommandType.HSMGetStorageDomainInfo), + any(HSMGetStorageDomainInfoVDSCommandParameters.class))).thenReturn(returnValue); + + // Execute command + getQuery().executeQueryCommand(); + + // Assert the query's results + List<StorageDomainStatic> returnedStorageDomainList = new ArrayList<>(); + assertEquals(returnedStorageDomainList, getQuery().getQueryReturnValue().getReturnValue()); + } + + @Test + public void testNullStorageDomainListQuery() { + mockVdsCommand(); + + // Create parameters + StorageDomainsAndStoragePoolIdQueryParameters paramsMock = getQueryParameters(); + when(paramsMock.getStorageDomainList()).thenReturn(null); + + // Run 'HSMGetStorageDomainInfo' command + VDSReturnValue returnValue = new VDSReturnValue(); + returnValue.setSucceeded(true); + + Pair<StorageDomainStatic, Guid> storageDomainToPoolId = new Pair<>(storageDomain.getStorageStaticData(), Guid.newGuid()); + returnValue.setReturnValue(storageDomainToPoolId); + when(vdsBrokerFrontendMock.RunVdsCommand(eq(VDSCommandType.HSMGetStorageDomainInfo), + any(HSMGetStorageDomainInfoVDSCommandParameters.class))).thenReturn(returnValue); + + // Execute command + getQuery().executeQueryCommand(); + + // Assert the query's results + List<StorageDomainStatic> returnedStorageDomainList = new ArrayList<>(); + assertEquals(returnedStorageDomainList, getQuery().getQueryReturnValue().getReturnValue()); + } + + private void mockVdsCommand() { + vdsBrokerFrontendMock = mock(VDSBrokerFrontend.class); + doReturn(vdsBrokerFrontendMock).when(getQuery()).getVdsBroker(); + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java index 32ae874..6b8dfd6 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java @@ -376,6 +376,7 @@ GetAffinityGroupsByVmId, GetStorageDomainsWithAttachedStoragePoolGuid, GetFileStorageDomainsWithAttachedStoragePoolGuid, + GetBlockStorageDomainsWithAttachedStoragePoolGuid, GetAllDisksPartialDataByVmId(VdcQueryAuthType.User), GetVmTemplateCount, -- To view, visit http://gerrit.ovirt.org/36478 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id93a96ad7fdad3305f3f2254f67f476c1e989b6f Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Maor Lipchuk <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
