package org.ovirt.engine.core.dao; import static java.util.stream.Collectors.toList; import static org.hamcrest.CoreMatchers.hasItem; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.List; import org.junit.Test; import org.ovirt.engine.core.common.businessentities.VmBlockJob; import org.ovirt.engine.core.common.businessentities.VmBlockJobType; import org.ovirt.engine.core.common.businessentities.VmJob; import org.ovirt.engine.core.common.businessentities.VmJobState; import org.ovirt.engine.core.common.businessentities.VmJobType; import org.ovirt.engine.core.compat.Guid; public class VmJobDaoTest extends BaseDaoTestCase { private VmJobDao dao; @Override public void setUp() throws Exception { super.setUp(); dao = dbFacade.getVmJobDao(); } @Test(expected = UnsupportedOperationException.class) public void testGetForwardCompatibility() { dao.get(Guid.newGuid()); fail("VmJobDao.get(Guid) isn't implemented yet. If you implement it, don't forget to implement this test too"); } @Test public void testGetAll() { List<Guid> ids = dao.getAll().stream().map(VmJob::getId).collect(toList()); assertTrue(ids.remove(FixturesTool.EXISTING_VM_JOB)); assertTrue(ids.remove(FixturesTool.EXISTING_VM_BLOCK_JOB)); assertTrue(ids.isEmpty()); } @Test public void testGetAllForVmWithJob() { List<VmJob> jobs = dao.getAll().stream() .filter(job -> job.getVmId().equals(FixturesTool.VM_RHEL5_POOL_57)) .collect(toList()); assertEquals(1, jobs.size()); assertEquals(FixturesTool.EXISTING_VM_JOB, jobs.get(0).getId()); } @Test public void testGetAllForVmWithBlockJob() { List<VmJob> jobs = dao.getAll().stream() .filter(job -> job.getVmId().equals(FixturesTool.VM_RHEL5_POOL_59)) .collect(toList()); assertEquals(1, jobs.size()); assertEquals(FixturesTool.EXISTING_VM_BLOCK_JOB, jobs.get(0).getId()); assertTrue(jobs.get(0) instanceof VmBlockJob); } @Test public void testGetAllForVmWithNonExistentVm() { List<VmJob> jobs = dao.getAll().stream() .filter(job -> job.getVmId().equals(Guid.Empty)) .collect(toList()); assertTrue(jobs.isEmpty()); } @Test public void testDelete() { dao.remove(FixturesTool.EXISTING_VM_JOB); List<Guid> ids = dao.getAll().stream().map(VmJob::getId).collect(toList()); assertTrue(ids.remove(FixturesTool.EXISTING_VM_BLOCK_JOB)); assertTrue(ids.isEmpty()); } @Test public void testInsertVmJob() { // Create a job in memory VmJob job = new VmJob(); job.setId(Guid.newGuid()); job.setVmId(FixturesTool.VM_RHEL5_POOL_60); job.setJobState(VmJobState.NORMAL); job.setJobType(VmJobType.UNKNOWN); assertInsert(job); } @Test public void testInsertVmBlockJob() { // Create a job in memory VmBlockJob job = new VmBlockJob(); job.setId(Guid.newGuid()); job.setVmId(FixturesTool.VM_RHEL5_POOL_50); job.setJobState(VmJobState.NORMAL); // Update block job fields job.setBlockJobType(VmBlockJobType.COMMIT); job.setBandwidth(16L); job.setCursorCur(11L); job.setCursorEnd(1981L); job.setImageGroupId(FixturesTool.IMAGE_GROUP_ID); assertInsert(job); } private void assertInsert(VmJob job) { // Save it dao.save(job); // Retrieve it List<VmJob> jobs = dao.getAll(); assertThat(jobs, hasItem(job)); // Be kind, rewind dao.remove(job.getId()); } @Test public void testUpdate() { // Get a block job VmBlockJob job = (VmBlockJob) dao.getAll().stream() .filter(j -> j.getId().equals(FixturesTool.EXISTING_VM_BLOCK_JOB)) .findFirst().orElse(null); // Make some changes job.setBandwidth(1981L); job.setJobState(VmJobState.UNKNOWN); dao.update(job); // Get the job again VmBlockJob updatedJob = (VmBlockJob) dao.getAll().stream() .filter(j -> j.getId().equals(FixturesTool.EXISTING_VM_BLOCK_JOB)) .findFirst().orElse(null); assertEquals(job, updatedJob); } }