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 fetching 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 <[email protected]>
---
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, 292 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/48/36448/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..8fc7f2c
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetFileStorageDomainsWithAttachedStoragePoolGuidQuery.java
@@ -0,0 +1,55 @@
+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;
+import org.ovirt.engine.core.common.utils.Pair;
+import org.ovirt.engine.core.compat.Guid;
+
+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 
storageServerConnections) {
+        Pair<StorageDomainStatic, Guid> domainFromIrs = null;
+        List<StorageDomain> existingStorageDomains = 
getExistingStorageDomainList();
+        if (!existingStorageDomains.isEmpty()) {
+            StorageDomain storageDomain = existingStorageDomains.get(0);
+            if (storageDomain.getStoragePoolId() != null) {
+                
storageDomainsWithAttachedStoragePoolId.add(storageDomain.getStorageStaticData());
+            }
+        }
+        return storageDomainsWithAttachedStoragePoolId;
+    }
+
+    protected List<StorageDomain> getExistingStorageDomainList() {
+        VdcQueryReturnValue returnValue = 
getBackend().runInternalQuery(VdcQueryType.GetExistingStorageDomainList,
+                new GetExistingStorageDomainListParameters(
+                        getVdsId(),
+                        
getParameters().getStorageServerConnection().getstorage_type(),
+                        StorageDomainType.Data,
+                        
getParameters().getStorageServerConnection().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..de9bf54
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetFileStorageDomainsWithAttachedStoragePoolGuidQueryTest.java
@@ -0,0 +1,236 @@
+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.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.VdsDAO;
+
+public class GetFileStorageDomainsWithAttachedStoragePoolGuidQueryTest  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());
+    }
+
+    @Test
+    public void testFetchUsingStorageServerConnectionWithEmptyListRetrieved() {
+        mockVdsCommand();
+
+        // Create parameters
+        StorageDomainsAndStoragePoolIdQueryParameters paramsMock = 
getQueryParameters();
+        when(paramsMock.getStorageDomainList()).thenReturn(null);
+        when(paramsMock.getStorageServerConnection()).thenReturn(new 
StorageServerConnections());
+
+        List<StorageDomain> storageDomains = new ArrayList<>();
+        
doReturn(storageDomains).when(getQuery()).getExistingStorageDomainList();
+
+        // Execute command
+        getQuery().executeQueryCommand();
+
+        // Assert the query's results
+        List<StorageDomainStatic> returnedStorageDomainList = new 
ArrayList<>();
+        assertEquals(returnedStorageDomainList, 
getQuery().getQueryReturnValue().getReturnValue());
+    }
+
+    @Test
+    public void 
testFetchUsingStorageServerConnectionWithAttachedStorageDomain() {
+        mockVdsCommand();
+
+        // Create parameters
+        StorageDomainsAndStoragePoolIdQueryParameters paramsMock = 
getQueryParameters();
+        when(paramsMock.getStorageDomainList()).thenReturn(null);
+        when(paramsMock.getStorageServerConnection()).thenReturn(new 
StorageServerConnections());
+
+        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();
+
+        // 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();
+
+        // Create parameters
+        StorageDomainsAndStoragePoolIdQueryParameters paramsMock = 
getQueryParameters();
+        when(paramsMock.getStorageDomainList()).thenReturn(null);
+        when(paramsMock.getStorageServerConnection()).thenReturn(new 
StorageServerConnections());
+
+        StorageDomain mockedStorageDomain = new StorageDomain();
+        mockedStorageDomain.setStorageStaticData(new StorageDomainStatic());
+
+        List<StorageDomain> storageDomains = new ArrayList<>();
+        storageDomains.add(mockedStorageDomain);
+        
doReturn(storageDomains).when(getQuery()).getExistingStorageDomainList();
+
+        // 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 be83c97..32ae874 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
@@ -375,6 +375,7 @@
     GetAffinityGroupsByClusterId,
     GetAffinityGroupsByVmId,
     GetStorageDomainsWithAttachedStoragePoolGuid,
+    GetFileStorageDomainsWithAttachedStoragePoolGuid,
 
     GetAllDisksPartialDataByVmId(VdcQueryAuthType.User),
     GetVmTemplateCount,


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I63a90b86b8427bd6128becccf83be7204637e611
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

Reply via email to