package org.ovirt.engine.core.bll.snapshots;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.ovirt.engine.core.bll.AbstractQueryTest;
import org.ovirt.engine.core.common.businessentities.Snapshot;
import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotStatus;
import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType;
import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.DiskImageDao;
import org.ovirt.engine.core.dao.SnapshotDao;
public class GetAllDiskSnapshotsByStorageDomainIdQueryTest
extends AbstractQueryTest<IdQueryParameters,
GetAllDiskSnapshotsByStorageDomainIdQuery<IdQueryParameters>> {
/** The {@link org.ovirt.engine.core.dao.DiskImageDao} mocked for the test */
@Mock
private DiskImageDao diskImageDao;
/** The {@link org.ovirt.engine.core.dao.SnapshotDao} mocked for the test */
@Mock
private SnapshotDao snapshotDaoMock;
/** The queried storage domain ID */
private Guid storageDoaminId;
private static final String snapshotDescription = "Test Snapshot";
@Before
@Override
public void setUp() throws Exception {
super.setUp();
storageDoaminId = Guid.newGuid();
setUpDaoMocks();
}
private void setUpDaoMocks() {
Guid snapshotId = Guid.newGuid();
Snapshot snapshot = new Snapshot(snapshotId, SnapshotStatus.OK, Guid.newGuid(), null, SnapshotType.REGULAR,
snapshotDescription, new Date(), "");
DiskImage disk1 = new DiskImage();
disk1.setVmSnapshotId(snapshotId);
DiskImage disk2 = new DiskImage();
disk2.setVmSnapshotId(snapshotId);
DiskImage disk3 = new DiskImage();
disk3.setActive(true);
List<DiskImage> diskImages = Arrays.asList(disk1, disk2, disk3);
List<Snapshot> snapshots = Collections.singletonList(snapshot);
when(diskImageDao.getAllSnapshotsForStorageDomain(storageDoaminId)).thenReturn(diskImages);
when(snapshotDaoMock.getAllByStorageDomain(storageDoaminId)).thenReturn(snapshots);
}
@Test
public void testExecuteQueryCommand() {
IdQueryParameters params = getQueryParameters();
when(params.getId()).thenReturn(storageDoaminId);
GetAllDiskSnapshotsByStorageDomainIdQuery<IdQueryParameters> query = getQuery();
query.executeQueryCommand();
List<DiskImage> diskImages = query.getQueryReturnValue().getReturnValue();
// Assert the correct disks are returned
assertEquals("There should be two images returned", 2, diskImages.size());
assertEquals("DiskImage should contain the VmSnapshotDescription", snapshotDescription,
diskImages.get(0).getVmSnapshotDescription());
}
@Test
public void testNoActiveImagesReturned() {
IdQueryParameters params = getQueryParameters();
when(params.getId()).thenReturn(storageDoaminId);
GetAllDiskSnapshotsByStorageDomainIdQuery<IdQueryParameters> query = getQuery();
query.executeQueryCommand();
List<DiskImage> diskImages = query.getQueryReturnValue().getReturnValue();
// Assert the no active images are returned
assertTrue("Active images shouldn't be returned", diskImages.stream().noneMatch(DiskImage::getActive));
}
}