package org.ovirt.engine.core.bll.storage.domain; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.when; import java.util.Collections; import java.util.List; import org.junit.Before; import org.junit.ClassRule; 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.common.action.StorageDomainManagementParameter; import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; import org.ovirt.engine.core.common.businessentities.storage.LUNs; import org.ovirt.engine.core.common.errors.EngineMessage; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.StorageDomainStaticDao; import org.ovirt.engine.core.utils.MockConfigRule; public class AddExistingBlockStorageDomainCommandTest extends BaseCommandTest { private StorageDomainManagementParameter parameters = new StorageDomainManagementParameter(getStorageDomain()); @Spy @InjectMocks private AddExistingBlockStorageDomainCommand<StorageDomainManagementParameter> command = new AddExistingBlockStorageDomainCommand<>(parameters, null); @ClassRule public static MockConfigRule mcr = new MockConfigRule(); @Mock private StorageDomainStaticDao storageDomainStaticDao; @Before public void setUp() { doNothing().when(command).addStorageDomainInDb(); doNothing().when(command).updateStorageDomainDynamicFromIrs(); doNothing().when(command).saveLUNsInDB(anyList()); doNothing().when(command).updateMetadataDevices(); } @Test public void testAddExistingBlockDomainSuccessfully() { doReturn(getLUNs()).when(command).getLUNsFromVgInfo(parameters.getStorageDomain().getStorage()); command.executeCommand(); assertTrue(command.getReturnValue().getSucceeded()); } @Test public void testAddExistingBlockDomainWhenVgInfoReturnsEmptyLunList() { doReturn(Collections.emptyList()).when(command).getLUNsFromVgInfo(parameters.getStorageDomain().getStorage()); assertFalse("Could not connect to Storage Domain", command.canAddDomain()); assertTrue("Import block Storage Domain should have failed due to empty Lun list returned from VGInfo ", command.getReturnValue() .getValidationMessages() .contains(EngineMessage.ACTION_TYPE_FAILED_PROBLEM_WITH_CANDIDATE_INFO.toString())); } @Test public void testAlreadyExistStorageDomain() { when(storageDomainStaticDao.get(any(Guid.class))).thenReturn(getStorageDomain()); assertFalse("Storage Domain already exists", command.canAddDomain()); assertTrue("Import block Storage Domain should have failed due to already existing Storage Domain", command.getReturnValue() .getValidationMessages() .contains(EngineMessage.ACTION_TYPE_FAILED_STORAGE_DOMAIN_ALREADY_EXIST.toString())); } private static StorageDomainStatic getStorageDomain() { StorageDomainStatic storageDomain = new StorageDomainStatic(); storageDomain.setStorage(Guid.newGuid().toString()); return storageDomain; } private static List<LUNs> getLUNs() { LUNs lun = new LUNs(); lun.setId(Guid.newGuid().toString()); return Collections.singletonList(lun); } }