package org.ovirt.engine.core.bll.validator.storage; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.ovirt.engine.core.bll.validator.ValidationResultMatchers.failsWith; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainSharedStatus; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; import org.ovirt.engine.core.common.businessentities.StorageServerConnections; 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.StorageServerConnectionDao; @RunWith(MockitoJUnitRunner.class) public class StorageConnectionValidatorTest { private StorageServerConnections connection; private StorageConnectionValidator validator; private StorageDomain domain; private static final String CONNECTION_ID_FOR_VALIDATION = Guid.newGuid().toString(); private static final int NUMBER_OF_EXISTING_CONNECTIONS = 3; @Mock protected StorageServerConnectionDao storageServerConnectionDao; @Before public void setUp() { connection = new StorageServerConnections(); connection.setId(CONNECTION_ID_FOR_VALIDATION); connection.setStorageType(StorageType.ISCSI); validator = spy(new StorageConnectionValidator(connection)); domain = new StorageDomain(); domain.setStorageType(StorageType.ISCSI); domain.setId(Guid.newGuid()); domain.setStatus(StorageDomainStatus.Maintenance); domain.setStorageDomainSharedStatus(StorageDomainSharedStatus.Inactive); } @Test public void isConnectionNotExists() { validator = new StorageConnectionValidator(null); assertThat(validator.isConnectionExists(), failsWith(EngineMessage.ACTION_TYPE_FAILED_STORAGE_CONNECTION_NOT_EXIST)); } @Test public void isConnectionExists() { validator = new StorageConnectionValidator(connection); assertTrue(validator.isConnectionExists().isValid()); } @Test public void isSameStorageType() { domain.setStorageType(StorageType.ISCSI); assertTrue(validator.isSameStorageType(domain).isValid()); } @Test public void isNotSameStorageType() { domain.setStorageType(StorageType.NFS); assertThat(validator.isSameStorageType(domain), failsWith(EngineMessage.ACTION_TYPE_FAILED_STORAGE_CONNECTION_UNSUPPORTED_ACTION_NOT_SAME_STORAGE_TYPE)); } @Test public void isNotISCSIConnectionAndDomain() { connection.setStorageType(StorageType.NFS); domain.setStorageType(StorageType.NFS); assertThat(validator.isISCSIConnectionAndDomain(domain), failsWith(EngineMessage.ACTION_TYPE_FAILED_ACTION_IS_SUPPORTED_ONLY_FOR_ISCSI_DOMAINS)); } @Test public void isISCSIConnectionAndDomain() { connection.setStorageType(StorageType.ISCSI); domain.setStorageType(StorageType.ISCSI); assertTrue(validator.isISCSIConnectionAndDomain(domain).isValid()); } @Test public void isDomainOfConnectionExistsAndNonActive() { domain.setStorageType(StorageType.ISCSI); assertTrue(validator.isDomainOfConnectionExistsAndInactive(domain).isValid()); } @Test public void isDomainOfConnectionExistsAndActive() { domain.setStorageType(StorageType.ISCSI); domain.setStatus(StorageDomainStatus.Active); domain.setStorageDomainSharedStatus(StorageDomainSharedStatus.Active); assertFalse(validator.isDomainOfConnectionExistsAndInactive(domain).isValid()); } @Test public void isConnectionForISCSIDomainNotAttached() { doReturn(getConnections()).when(validator).getAllConnectionsForDomain(domain.getId()); assertFalse(validator.isConnectionForISCSIDomainAttached(domain)); } @Test public void isConnectionForISCSIDomainAttached() { StorageServerConnections connection = new StorageServerConnections(); connection.setId(CONNECTION_ID_FOR_VALIDATION); List<StorageServerConnections> connections = getConnections(); connections.add(connection); doReturn(connections).when(validator).getAllConnectionsForDomain(domain.getId()); assertTrue(validator.isConnectionForISCSIDomainAttached(domain)); } private List<StorageServerConnections> getConnections() { return Stream.generate(StorageServerConnections::new) .limit(NUMBER_OF_EXISTING_CONNECTIONS) .peek(conn -> conn.setId(Guid.newGuid().toString())) .collect(Collectors.toList()); } }