package org.ovirt.engine.core.bll.storage.connection; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; import org.ovirt.engine.core.bll.BaseCommandTest; import org.ovirt.engine.core.bll.ValidateTestUtils; import org.ovirt.engine.core.common.action.StorageServerConnectionParametersBase; import org.ovirt.engine.core.common.businessentities.NfsVersion; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; import org.ovirt.engine.core.common.businessentities.StorageServerConnections; import org.ovirt.engine.core.common.businessentities.storage.LUNs; import org.ovirt.engine.core.common.businessentities.storage.StorageType; import org.ovirt.engine.core.common.errors.EngineMessage; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.LunDao; import org.ovirt.engine.core.dao.StorageServerConnectionDao; public class RemoveStorageServerConnectionCommandTest extends BaseCommandTest { private static final StorageServerConnections NFSConnection = createNFSConnection( "multipass.my.domain.tlv.company.com:/export/allstorage/data1", StorageType.NFS, NfsVersion.V4, 50, 0); private StorageServerConnections iSCSIConnection = createIscsiConnection( "10.11.12.225", StorageType.ISCSI, "iqn.2013-04.myhat.com:abc-target1", "user1", "mypassword", "1"); @Mock private LunDao lunDao; @Mock private StorageServerConnectionDao storageServerConnectionDao; private StorageServerConnectionParametersBase parameters = new StorageServerConnectionParametersBase(null, Guid.newGuid(), false); @Spy @InjectMocks private RemoveStorageServerConnectionCommand<StorageServerConnectionParametersBase> command = prepareCommand(); private RemoveStorageServerConnectionCommand<StorageServerConnectionParametersBase> prepareCommand() { return new RemoveStorageServerConnectionCommand<>(parameters, null); } private static StorageServerConnections createNFSConnection(String connection, StorageType type, NfsVersion version, int timeout, int retrans) { Guid id = Guid.newGuid(); StorageServerConnections connectionDetails = populateBasicConnectionDetails(id, connection, type); connectionDetails.setNfsVersion(version); connectionDetails.setNfsTimeo((short) timeout); connectionDetails.setNfsRetrans((short) retrans); return connectionDetails; } private static StorageServerConnections createIscsiConnection(String connection, StorageType type, String iqn, String userName, String password, String portal ) { Guid id = Guid.newGuid(); StorageServerConnections connectionDetails = populateBasicConnectionDetails(id, connection, type); connectionDetails.setIqn(iqn); connectionDetails.setUserName(userName); connectionDetails.setPassword(password); connectionDetails.setPortal(portal); return connectionDetails; } private static StorageServerConnections populateBasicConnectionDetails(Guid id, String connection, StorageType type) { StorageServerConnections connectionDetails = new StorageServerConnections(); connectionDetails.setId(id.toString()); connectionDetails.setConnection(connection); connectionDetails.setStorageType(type); return connectionDetails; } @Test public void checkRemoveConnectionEmptyId() { StorageServerConnections newNFSConnection = createNFSConnection( "multipass.my.domain.tlv.company.com:/export/allstorage/data2", StorageType.NFS, NfsVersion.V4, 300, 0); newNFSConnection.setId(""); parameters.setStorageServerConnection(newNFSConnection); ValidateTestUtils.runAndAssertValidateFailure(command, EngineMessage.ACTION_TYPE_FAILED_STORAGE_CONNECTION_ID_EMPTY); } @Test public void checkRemoveNotExistingConnection() { parameters.setStorageServerConnection(NFSConnection); ValidateTestUtils.runAndAssertValidateFailure(command, EngineMessage.ACTION_TYPE_FAILED_STORAGE_CONNECTION_NOT_EXIST); } @Test public void checkRemoveNFSConnectionDomainsExist() { parameters.setStorageServerConnection(NFSConnection); when(storageServerConnectionDao.get(NFSConnection.getId())).thenReturn(NFSConnection); List<StorageDomain> domains = new ArrayList<>(); StorageDomain domain1 = new StorageDomain(); domain1.setStorage(NFSConnection.getConnection()); domain1.setStatus(StorageDomainStatus.Active); domain1.setStorageName("domain1"); StorageDomain domain2 = new StorageDomain(); domain2.setStorage(NFSConnection.getConnection()); domain2.setStatus(StorageDomainStatus.Maintenance); domain2.setStorageName("domain2"); domains.add(domain1); domains.add(domain2); doReturn(domains).when(command).getStorageDomainsByConnId(NFSConnection.getId()); ValidateTestUtils.runAndAssertValidateFailure(command, EngineMessage.ACTION_TYPE_FAILED_STORAGE_CONNECTION_BELONGS_TO_SEVERAL_STORAGE_DOMAINS); } @Test public void checkRemoveNFSConnectionNoDomain() { parameters.setStorageServerConnection(NFSConnection); when(storageServerConnectionDao.get(NFSConnection.getId())).thenReturn(NFSConnection); List<StorageDomain> domains = new ArrayList<>(); doReturn(domains).when(command).getStorageDomainsByConnId(NFSConnection.getId()); ValidateTestUtils.runAndAssertValidateSuccess(command); } @Test public void checkRemoveIscsiConnectionDomainsExist() { parameters.setStorageServerConnection(iSCSIConnection); when(storageServerConnectionDao.get(iSCSIConnection.getId())).thenReturn(iSCSIConnection); List<LUNs> luns = new ArrayList<>(); LUNs lun1 = new LUNs(); lun1.setLUNId("3600144f09dbd05000000517e730b1212"); lun1.setStorageDomainName("storagedomain1"); lun1.setVolumeGroupId("G95OWd-Wvck-vftu-pMq9-9SAC-NF3E-ulDPsQ"); luns.add(lun1); when(lunDao.getAllForStorageServerConnection(iSCSIConnection.getId())).thenReturn(luns); ValidateTestUtils.runAndAssertValidateFailure(command, EngineMessage.ACTION_TYPE_FAILED_STORAGE_CONNECTION_BELONGS_TO_SEVERAL_STORAGE_DOMAINS); } @Test public void checkRemoveIscsiConnectionDomainsAndDisksExist() { parameters.setStorageServerConnection(iSCSIConnection); when(storageServerConnectionDao.get(iSCSIConnection.getId())).thenReturn(iSCSIConnection); List<LUNs> luns = new ArrayList<>(); LUNs lun1 = new LUNs(); lun1.setLUNId("3600144f09dbd05000000517e730b1212"); lun1.setStorageDomainName("storagedomain1"); lun1.setVolumeGroupId("G95OWd-Wvck-vftu-pMq9-9SAC-NF3E-ulDPsQ"); luns.add(lun1); LUNs lun2 = new LUNs(); lun2.setLUNId("3600144f09dbd05000000517e730b1212"); lun2.setStorageDomainName(""); lun2.setVolumeGroupId(""); lun2.setDiskAlias("disk2"); luns.add(lun2); when(lunDao.getAllForStorageServerConnection(iSCSIConnection.getId())).thenReturn(luns); ValidateTestUtils.runAndAssertValidateFailure(command, EngineMessage.ACTION_TYPE_FAILED_STORAGE_CONNECTION_BELONGS_TO_SEVERAL_STORAGE_DOMAINS_AND_DISKS); } @Test public void checkRemoveIscsiConnectionDisksExist() { parameters.setStorageServerConnection(iSCSIConnection); when(storageServerConnectionDao.get(iSCSIConnection.getId())).thenReturn(iSCSIConnection); List<LUNs> luns = new ArrayList<>(); LUNs lun1 = new LUNs(); lun1.setLUNId("3600144f09dbd05000000517e730b1212"); lun1.setStorageDomainName("storagedomain1"); lun1.setVolumeGroupId(""); lun1.setDiskAlias("disk1"); luns.add(lun1); LUNs lun2 = new LUNs(); lun2.setLUNId("3600144f09dbd05000000517e730b1212"); lun2.setStorageDomainName("storagedomain4"); lun2.setVolumeGroupId(""); lun2.setDiskAlias("disk2"); luns.add(lun2); when(lunDao.getAllForStorageServerConnection(iSCSIConnection.getId())).thenReturn(luns); ValidateTestUtils.runAndAssertValidateFailure(command, EngineMessage.ACTION_TYPE_FAILED_STORAGE_CONNECTION_BELONGS_TO_SEVERAL_DISKS); } @Test public void checkExecuteCommandWithVdsId() { parameters.setStorageServerConnection(NFSConnection); doReturn(true).when(command).disconnectStorage(); command.executeCommand(); } @Test public void checkExecuteCommandWithEmptyVdsId() { parameters.setStorageServerConnection(NFSConnection); parameters.setVdsId(Guid.Empty); // Test will fail if we try to disconnect command.executeCommand(); verify(command, never()).disconnectStorage(); } @Test public void checkExecuteCommandWithNullVdsId() { parameters.setStorageServerConnection(NFSConnection); parameters.setVdsId(null); // Test will fail if we try to disconnect command.executeCommand(); verify(command, never()).disconnectStorage(); } }