package org.ovirt.engine.core.bll; import static org.junit.Assert.assertEquals; 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.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.VmDao; public class GetVmsByStorageDomainQueryTest extends AbstractQueryTest<IdQueryParameters, GetVmsByStorageDomainQuery<IdQueryParameters>> { @Mock VmDao vmDao; Guid domainId = Guid.newGuid(); GetVmsByStorageDomainQuery<IdQueryParameters> query; @Override @Before public void setUp() throws Exception { super.setUp(); params = getQueryParameters(); when(params.getId()).thenReturn(domainId); query = getQuery(); } @Test public void testExecuteQueryCommandNoDisks() { List<VM> vmsOfDomain = new ArrayList<>(); VM vm1 = mock(VM.class); VM vm2 = mock(VM.class); vmsOfDomain.add(vm1); vmsOfDomain.add(vm2); when(vmDao.getAllForStorageDomain(domainId)).thenReturn(vmsOfDomain); VdcQueryReturnValue returnValue = new VdcQueryReturnValue(); returnValue.setSucceeded(true); List<DiskImage> diskImages = new ArrayList<>(); returnValue.setReturnValue(diskImages); doReturn(returnValue).when(query).getAllDisksByStorageDomain(domainId); query.executeQueryCommand(); List<VM> vms = query.getQueryReturnValue().getReturnValue(); assertEquals(2, vms.size()); } @Test public void testExecuteQueryCommandNoVms() { List<VM> vmsOfDomain = new ArrayList<>(); when(vmDao.getAllForStorageDomain(domainId)).thenReturn(vmsOfDomain); VdcQueryReturnValue returnValue = new VdcQueryReturnValue(); returnValue.setSucceeded(true); List<DiskImage> diskImages = new ArrayList<>(); returnValue.setReturnValue(diskImages); doReturn(returnValue).when(query).getAllDisksByStorageDomain(domainId); query.executeQueryCommand(); List<VM> vms = query.getQueryReturnValue().getReturnValue(); assertEquals(0, vms.size()); } @Test public void testExecuteQueryCommandSharedDisks() { List<VM> vmsOfDomain = new ArrayList<>(); VM vm1 = new VM(); vm1.setName("vm1"); VM vm2 = new VM(); vm2.setName("vm2"); vmsOfDomain.add(vm1); vmsOfDomain.add(vm2); when(vmDao.getAllForStorageDomain(domainId)).thenReturn(vmsOfDomain); VdcQueryReturnValue returnValue = new VdcQueryReturnValue(); returnValue.setSucceeded(true); List<DiskImage> diskImages = new ArrayList<>(); DiskImage d1 = mock(DiskImage.class); when(d1.isShareable()).thenReturn(true); ArrayList<String> vmNames = new ArrayList<>(); vmNames.add("vm1"); vmNames.add("vm2"); when(d1.getVmNames()).thenReturn(vmNames); //floating disk DiskImage d2 = mock(DiskImage.class); when(d2.isShareable()).thenReturn(false); diskImages.add(d1); diskImages.add(d2); returnValue.setReturnValue(diskImages); doReturn(returnValue).when(query).getAllDisksByStorageDomain(domainId); query.executeQueryCommand(); List<VM> vms = query.getQueryReturnValue().getReturnValue(); assertEquals(2, vms.size()); assertEquals(1, vms.get(0).getDiskList().size()); assertEquals(1, vms.get(1).getDiskList().size()); } }