Maor Lipchuk has uploaded a new change for review. Change subject: core: Add vdc query for import File Storage Domain ......................................................................
core: Add vdc query for import File Storage Domain Add vdc query for validating that the file 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 exisitng Storage Domains. Change-Id: I63a90b86b8427bd6128becccf83be7204637e611 Bug-Url: https://bugzilla.redhat.com/1138115 Signed-off-by: Maor Lipchuk <mlipc...@redhat.com> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetFileStorageDomainsWithAttachedStoragePoolGuidQuery.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetFileStorageDomainsWithAttachedStoragePoolGuidQueryTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java 3 files changed, 326 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/41/36541/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetFileStorageDomainsWithAttachedStoragePoolGuidQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetFileStorageDomainsWithAttachedStoragePoolGuidQuery.java new file mode 100644 index 0000000..270d9c4 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetFileStorageDomainsWithAttachedStoragePoolGuidQuery.java @@ -0,0 +1,53 @@ +package org.ovirt.engine.core.bll.storage; + +import java.util.ArrayList; +import java.util.List; + +import org.ovirt.engine.core.common.businessentities.StorageDomain; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; +import org.ovirt.engine.core.common.businessentities.StorageDomainType; +import org.ovirt.engine.core.common.businessentities.StorageServerConnections; +import org.ovirt.engine.core.common.queries.GetExistingStorageDomainListParameters; +import org.ovirt.engine.core.common.queries.StorageDomainsAndStoragePoolIdQueryParameters; +import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; +import org.ovirt.engine.core.common.queries.VdcQueryType; + +public class GetFileStorageDomainsWithAttachedStoragePoolGuidQuery<P extends StorageDomainsAndStoragePoolIdQueryParameters> extends GetStorageDomainsWithAttachedStoragePoolGuidQuery<P> { + public GetFileStorageDomainsWithAttachedStoragePoolGuidQuery(P parameters) { + super(parameters); + } + + @Override + protected List<StorageDomainStatic> filterAttachedStorageDomains() { + List<StorageDomainStatic> storageDomainStaticList = new ArrayList<>(); + if (getParameters().getStorageDomainList() != null) { + storageDomainStaticList = getAttachedStorageDomains(getParameters().getStorageDomainList()); + } else if (getParameters().getStorageServerConnection() != null) { + storageDomainStaticList = + getStorageDomainsByStorageServerConnections(getParameters().getStorageServerConnection()); + } + return storageDomainStaticList; + } + + protected List<StorageDomainStatic> getStorageDomainsByStorageServerConnections(StorageServerConnections storageServerConnection) { + List<StorageDomainStatic> storageDomainsWithAttachedStoragePoolId = new ArrayList<>(); + List<StorageDomain> existingStorageDomains = getExistingStorageDomainList(storageServerConnection); + if (!existingStorageDomains.isEmpty()) { + StorageDomain storageDomain = existingStorageDomains.get(0); + if (storageDomain.getStoragePoolId() != null) { + storageDomainsWithAttachedStoragePoolId.add(storageDomain.getStorageStaticData()); + } + } + return storageDomainsWithAttachedStoragePoolId; + } + + protected List<StorageDomain> getExistingStorageDomainList(StorageServerConnections storageServerConnection) { + VdcQueryReturnValue returnValue = getBackend().runInternalQuery(VdcQueryType.GetExistingStorageDomainList, + new GetExistingStorageDomainListParameters( + getVdsId(), + storageServerConnection.getstorage_type(), + StorageDomainType.Data, + storageServerConnection.getconnection())); + return returnValue.getReturnValue(); + } +} diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetFileStorageDomainsWithAttachedStoragePoolGuidQueryTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetFileStorageDomainsWithAttachedStoragePoolGuidQueryTest.java new file mode 100644 index 0000000..cfe688d --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetFileStorageDomainsWithAttachedStoragePoolGuidQueryTest.java @@ -0,0 +1,272 @@ +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.StoragePool; +import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; +import org.ovirt.engine.core.common.businessentities.StorageServerConnections; +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.StoragePoolDAO; +import org.ovirt.engine.core.dao.VdsDAO; + +public class GetFileStorageDomainsWithAttachedStoragePoolGuidQueryTest extends + AbstractQueryTest<StorageDomainsAndStoragePoolIdQueryParameters, GetFileStorageDomainsWithAttachedStoragePoolGuidQuery<StorageDomainsAndStoragePoolIdQueryParameters>> { + @Mock + private VDSBrokerFrontend vdsBrokerFrontendMock; + + private StorageDomain storageDomain; + + @Before + public void setUp() throws Exception { + super.setUp(); + storageDomain = new StorageDomain(); + storageDomain.setStorageName("Name of Storage"); + storageDomain.setStorageType(StorageType.NFS); + + 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); + } + + @Test + public void testAttachedStorageDomainWithStorageDomainsParameterQuery() { + mockVdsCommand(); + StoragePool storagePool = new StoragePool(); + storagePool.setStatus(StoragePoolStatus.Up); + mockStoragePoolDao(storagePool); + + // 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(); + StoragePool storagePool = new StoragePool(); + storagePool.setStatus(StoragePoolStatus.Up); + mockStoragePoolDao(storagePool); + + // 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(); + StoragePool storagePool = new StoragePool(); + storagePool.setStatus(StoragePoolStatus.Up); + mockStoragePoolDao(storagePool); + + // 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(); + StoragePool storagePool = new StoragePool(); + storagePool.setStatus(StoragePoolStatus.Up); + mockStoragePoolDao(storagePool); + + // 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()); + } + + @Test + public void testFetchUsingStorageServerConnectionWithEmptyListRetrieved() { + mockVdsCommand(); + StoragePool storagePool = new StoragePool(); + storagePool.setStatus(StoragePoolStatus.Up); + mockStoragePoolDao(storagePool); + + // Create parameters + StorageDomainsAndStoragePoolIdQueryParameters paramsMock = getQueryParameters(); + when(paramsMock.getStorageDomainList()).thenReturn(null); + StorageServerConnections storageServerConnections = new StorageServerConnections(); + when(paramsMock.getStorageServerConnection()).thenReturn(storageServerConnections); + + List<StorageDomain> storageDomains = new ArrayList<>(); + doReturn(storageDomains).when(getQuery()).getExistingStorageDomainList(eq(storageServerConnections)); + + // Execute command + getQuery().executeQueryCommand(); + + // Assert the query's results + List<StorageDomainStatic> returnedStorageDomainList = new ArrayList<>(); + assertEquals(returnedStorageDomainList, getQuery().getQueryReturnValue().getReturnValue()); + } + + @Test + public void testFetchUsingStorageServerConnectionWithAttachedStorageDomain() { + mockVdsCommand(); + StoragePool storagePool = new StoragePool(); + storagePool.setStatus(StoragePoolStatus.Up); + mockStoragePoolDao(storagePool); + + // Create parameters + StorageDomainsAndStoragePoolIdQueryParameters paramsMock = getQueryParameters(); + when(paramsMock.getStorageDomainList()).thenReturn(null); + StorageServerConnections storageServerConnection = new StorageServerConnections(); + when(paramsMock.getStorageServerConnection()).thenReturn(storageServerConnection); + + StorageDomain mockedStorageDomain = new StorageDomain(); + mockedStorageDomain.setStorageStaticData(new StorageDomainStatic()); + mockedStorageDomain.setStoragePoolId(Guid.newGuid()); + + List<StorageDomain> storageDomains = new ArrayList<>(); + storageDomains.add(mockedStorageDomain); + doReturn(storageDomains).when(getQuery()).getExistingStorageDomainList(eq(storageServerConnection)); + + // Execute command + getQuery().executeQueryCommand(); + + // Assert the query's results + List<StorageDomainStatic> returnedStorageDomainList = new ArrayList<>(); + returnedStorageDomainList.add(mockedStorageDomain.getStorageStaticData()); + assertEquals(returnedStorageDomainList, getQuery().getQueryReturnValue().getReturnValue()); + } + + @Test + public void testFetchUsingStorageServerConnectionWithUnattachedStorageDomain() { + mockVdsCommand(); + StoragePool storagePool = new StoragePool(); + storagePool.setStatus(StoragePoolStatus.Up); + mockStoragePoolDao(storagePool); + + // Create parameters + StorageDomainsAndStoragePoolIdQueryParameters paramsMock = getQueryParameters(); + when(paramsMock.getStorageDomainList()).thenReturn(null); + StorageServerConnections storageServerConnections = new StorageServerConnections(); + when(paramsMock.getStorageServerConnection()).thenReturn(storageServerConnections); + + StorageDomain mockedStorageDomain = new StorageDomain(); + mockedStorageDomain.setStorageStaticData(new StorageDomainStatic()); + + List<StorageDomain> storageDomains = new ArrayList<>(); + storageDomains.add(mockedStorageDomain); + doReturn(storageDomains).when(getQuery()).getExistingStorageDomainList(eq(storageServerConnections)); + + // 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(); + } + + private void mockStoragePoolDao(StoragePool storagePool) { + StoragePoolDAO storagePoolDaoMock = mock(StoragePoolDAO.class); + when(getDbFacadeMockInstance().getStoragePoolDao()).thenReturn(storagePoolDaoMock); + when(storagePoolDaoMock.get(any(Guid.class))).thenReturn(storagePool); + } + +} 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 3155e8d..0543010 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 @@ -274,6 +274,7 @@ GetStorageServerConnectionByIscsiBondId, GetNetworksByIscsiBondId, GetStorageDomainsWithAttachedStoragePoolGuid, + GetFileStorageDomainsWithAttachedStoragePoolGuid, // Event Notification -- To view, visit http://gerrit.ovirt.org/36541 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I63a90b86b8427bd6128becccf83be7204637e611 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Maor Lipchuk <mlipc...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches