package org.ovirt.engine.core.bll.storage.domain; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.Mockito.doReturn; import static org.ovirt.engine.core.bll.ValidateTestUtils.runAndAssertValidateFailure; import static org.ovirt.engine.core.bll.ValidateTestUtils.runAndAssertValidateSuccess; import java.util.ArrayList; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; import org.mockito.junit.MockitoJUnitRunner; import org.ovirt.engine.core.bll.ValidationResult; import org.ovirt.engine.core.bll.storage.connection.ConnectAllHostsToLunCommand.ConnectAllHostsToLunCommandReturnValue; import org.ovirt.engine.core.bll.storage.utils.BlockStorageDiscardFunctionalityHelper; import org.ovirt.engine.core.common.action.ExtendSANStorageDomainParameters; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; import org.ovirt.engine.core.common.businessentities.storage.StorageType; import org.ovirt.engine.core.common.errors.EngineMessage; import org.ovirt.engine.core.compat.Guid; @RunWith(MockitoJUnitRunner.class) public class ExtendSANStorageDomainCommandTest { private StorageDomain storageDomain = createStorageDomain(); private ExtendSANStorageDomainParameters parameters = new ExtendSANStorageDomainParameters(storageDomain.getId(), new ArrayList<>()); @Spy @InjectMocks private ExtendSANStorageDomainCommand<ExtendSANStorageDomainParameters> command = new ExtendSANStorageDomainCommand<>(parameters, null); @Mock protected BlockStorageDiscardFunctionalityHelper discardHelper; @Before public void setUp() { command.setStorageDomain(storageDomain); } @Test public void validateSucceeds() { passAllValidations(); runAndAssertValidateSuccess(command); } @Test public void validateFailsDiscardFunctionalityBreaks() { passAllValidations(); EngineMessage lunsBreakStorageDomainDiscardSupportMessage = EngineMessage.ACTION_TYPE_FAILED_LUN_BREAKS_STORAGE_DOMAIN_PASS_DISCARD_SUPPORT; doReturn(new ValidationResult(lunsBreakStorageDomainDiscardSupportMessage)).when(discardHelper) .isExistingDiscardFunctionalityPreserved(anyList(), any(StorageDomain.class)); runAndAssertValidateFailure(command, lunsBreakStorageDomainDiscardSupportMessage); } private StorageDomain createStorageDomain() { StorageDomain storageDomain = new StorageDomain(); storageDomain.setId(Guid.newGuid()); return storageDomain; } private void passAllValidations() { doReturn(false).when(command).isLunsAlreadyInUse(anyList()); doReturn(true).when(command).checkStorageDomain(); doReturn(true).when(command).checkStorageDomainStatus(StorageDomainStatus.Active); storageDomain.setStorageType(StorageType.ISCSI); ConnectAllHostsToLunCommandReturnValue connectResult = new ConnectAllHostsToLunCommandReturnValue(); connectResult.setActionReturnValue(new ArrayList<>()); connectResult.setSucceeded(true); doReturn(connectResult).when(command).connectAllHostsToLun(); } }