package org.ovirt.engine.core.bll.storage.disk.image; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; import java.util.Map; 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.bll.AbstractUserQueryTest; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.queries.IdsQueryParameters; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.DiskImageDao; @RunWith(MockitoJUnitRunner.class) public class GetAncestorImagesByImagesIdsQueryTest extends AbstractUserQueryTest<IdsQueryParameters, GetAncestorImagesByImagesIdsQuery<IdsQueryParameters>> { @Mock private DiskImageDao diskImageDao; private List<Guid> imagesIds; private DiskImage image1; // snapshot 0 (base snapshot) private DiskImage image2; // snapshot 1 private DiskImage image3; // snapshot 2 (active image) @Override @Before public void setUp() throws Exception { super.setUp(); initializeImages(); imagesIds = new ArrayList<>(); when(getQueryParameters().getIds()).thenReturn(imagesIds); } @Test public void executeQueryCommandWithEmptyMap() { assertTrue(runQuery().isEmpty()); } @Test public void executeQueryCommandWithBaseSnapshotOnly() { imagesIds.add(image1.getImageId()); Map<Guid, DiskImage> queryReturnValue = runQuery(); assertEquals(1, queryReturnValue.size()); assertEquals(image1, queryReturnValue.get(image1.getImageId())); } @Test public void executeQueryCommandWithSnapshots() { imagesIds.add(image1.getImageId()); imagesIds.add(image2.getImageId()); imagesIds.add(image3.getImageId()); Map<Guid, DiskImage> queryReturnValue = runQuery(); assertEquals(3, queryReturnValue.size()); assertEquals(image1, queryReturnValue.get(image1.getImageId())); assertEquals(image1, queryReturnValue.get(image2.getImageId())); assertEquals(image1, queryReturnValue.get(image3.getImageId())); } private void initializeImages() { image1 = new DiskImage(); image1.setImageId(Guid.newGuid()); mockImageAncestor(image1, image1); image2 = new DiskImage(); image2.setImageId(Guid.newGuid()); mockImageAncestor(image2, image1); image3 = new DiskImage(); image3.setImageId(Guid.newGuid()); mockImageAncestor(image3, image1); } private void mockImageAncestor(DiskImage imageToMock, DiskImage imageAncestor) { when(diskImageDao.getAncestor(imageToMock.getImageId(), getUser().getId(), getQueryParameters().isFiltered())) .thenReturn(imageAncestor); } private Map<Guid, DiskImage> runQuery() { getQuery().executeQueryCommand(); return getQuery().getQueryReturnValue().getReturnValue(); } }