package org.ovirt.engine.core.dao;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.junit.Test;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VMStatus;
import org.ovirt.engine.core.common.businessentities.VmPool;
import org.ovirt.engine.core.common.businessentities.VmPoolMap;
import org.ovirt.engine.core.compat.Guid;
public class VmPoolDaoTest extends BaseDaoTestCase {
private static final Guid USER_ID = new Guid("9bf7c640-b620-456f-a550-0348f366544b");
private static final Guid CLUSTER_ID = new Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1");
private static final Guid DELETABLE_VM_POOL_ID = new Guid("103cfd1d-18b1-4790-8a0c-1e52621b0078");
private static final Guid EXISTING_VM_POOL_ID = new Guid("103cfd1d-18b1-4790-8a0c-1e52621b0076");
private static final Guid FREE_VM_ID = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4356");
private static final Guid EXISTING_VM_ID = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4355");
private static final int VM_POOL_COUNT = 3;
private VmPoolDao dao;
private VmPool existingVmPool;
private VmPool deletableVmPool;
private VmPool newVmPool;
private VmPoolMap newVmPoolMap;
private VmDao vmDao;
@Override
public void setUp() throws Exception {
super.setUp();
dao = dbFacade.getVmPoolDao();
vmDao = dbFacade.getVmDao();
existingVmPool = dao.get(EXISTING_VM_POOL_ID);
deletableVmPool = dao.get(DELETABLE_VM_POOL_ID);
newVmPool = new VmPool();
newVmPool.setName("New VM Pool");
newVmPool.setVmPoolDescription("This is a new VM pool.");
newVmPool.setClusterId(CLUSTER_ID);
newVmPoolMap = new VmPoolMap(FREE_VM_ID, EXISTING_VM_POOL_ID);
}
@Test
public void testRemoveVmFromPool() {
assertNotNull(vmDao.get(EXISTING_VM_ID).getVmPoolId());
dao.removeVmFromVmPool(EXISTING_VM_ID);
assertNull(vmDao.get(EXISTING_VM_ID).getVmPoolId());
}
/**
* Ensures that null is returned when the id is invalid.
*/
@Test
public void testGetVmPoolWithInvalidId() {
VmPool result = dao.get(Guid.newGuid());
assertNull(result);
}
/**
* Ensures that getting a VM pool works as expected.
*/
@Test
public void testGetVmPool() {
VmPool result = dao.get(existingVmPool.getVmPoolId());
assertGetResult(result);
}
@Test
public void testGetFilteredWithPermissions() {
VmPool result = dao.get(existingVmPool.getVmPoolId(), PRIVILEGED_USER_ID, true);
assertGetResult(result);
}
@Test
public void testGetFilteredWithPermissionsNoPermissions() {
VmPool result = dao.get(existingVmPool.getVmPoolId(), UNPRIVILEGED_USER_ID, true);
assertNull(result);
}
@Test
public void testGetFilteredWithPermissionsNoPermissionsAndNoFilter() {
VmPool result = dao.get(existingVmPool.getVmPoolId(), UNPRIVILEGED_USER_ID, false);
assertGetResult(result);
}
private void assertGetResult(VmPool result) {
assertNotNull(result);
assertEquals(existingVmPool, result);
}
/**
* Ensures that getting a VM pool by an invalid name returns null.
*/
@Test
public void testGetByNameWithInvalidName() {
VmPool result = dao.getByName("farkle");
assertNull(result);
}
/**
* Ensures that getting a VM pool by name works as expected.
*/
@Test
public void testGetByName() {
VmPool result = dao.getByName(existingVmPool.getName());
assertNotNull(result);
assertEquals(existingVmPool, result);
}
/**
* Ensures the right number of pools are returned.
*/
@Test
public void testGetAllVmPools() {
List<VmPool> result = dao.getAll();
assertNotNull(result);
assertFalse(result.isEmpty());
assertEquals(VM_POOL_COUNT, result.size());
}
/**
* Ensures an empty collection is returned.
*/
@Test
public void testGetAllVmPoolsForUserWithNoVmPools() {
List<VmPool> result = dao.getAllForUser(Guid.newGuid());
assertNotNull(result);
assertTrue(result.isEmpty());
}
/**
* Ensures a collection of pools are returned.
*/
@Test
public void testGetAllVmPoolsForUser() {
List<VmPool> result = dao.getAllForUser(USER_ID);
assertNotNull(result);
assertFalse(result.isEmpty());
}
/**
* Ensures that saving a VM pool works as expected.
*/
@Test
public void testSaveVmPool() {
dao.save(newVmPool);
VmPool result = dao.getByName(newVmPool.getName());
assertNotNull(result);
assertEquals(newVmPool, result);
}
/**
* Ensures that updating a VM pool works as expected.
*/
@Test
public void testUpdateVmPool() {
existingVmPool.setVmPoolDescription("This is an updated VM pool.");
dao.update(existingVmPool);
VmPool result = dao.get(existingVmPool.getVmPoolId());
assertEquals(existingVmPool, result);
}
/**
* Ensures removing a VM pool works as expected.
*/
@Test
public void testRemoveVmPool() {
dao.remove(deletableVmPool.getVmPoolId());
VmPool result = dao.get(deletableVmPool.getVmPoolId());
assertNull(result);
}
@Test
public void testAddVmToPool() {
assertNull(vmDao.get(FREE_VM_ID).getVmPoolId());
dao.addVmToPool(newVmPoolMap);
assertNotNull(vmDao.get(FREE_VM_ID).getVmPoolId());
}
@Test
public void testGetVmMapsInVmPoolByVmPoolIdAndStatus() {
List<VmPoolMap> result = dao.getVmMapsInVmPoolByVmPoolIdAndStatus(
existingVmPool.getVmPoolId(), VMStatus.MigratingFrom);
assertNotNull(result);
assertFalse(result.isEmpty());
}
/**
* Ensures that a VM from a vm pool is returned for a privileged user with filtering enabled.
*/
@Test
public void getVmDataFromPoolByPoolGuidWithPermissionsForPriviligedUser() {
VM result = dao.getVmDataFromPoolByPoolGuid(EXISTING_VM_POOL_ID, PRIVILEGED_USER_ID, true);
assertCorrectGetVmDataResult(result);
}
/**
* Ensures a VM from a vm pool by is returned for a non privileged user with filtering disabled.
*/
@Test
public void getVmDataFromPoolByPoolGuidWithoutPermissionsForNonPriviligedUser() {
VM result = dao.getVmDataFromPoolByPoolGuid(EXISTING_VM_POOL_ID, UNPRIVILEGED_USER_ID, false);
assertCorrectGetVmDataResult(result);
}
/**
* Ensures that no VM is returned for a non privileged user with filtering enabled.
*/
@Test
public void getVmDataFromPoolByPoolGuidWithPermissionsForNonPriviligedUser() {
VM result = dao.getVmDataFromPoolByPoolGuid(EXISTING_VM_POOL_ID, UNPRIVILEGED_USER_ID, true);
assertNull(result);
}
private void assertCorrectGetVmDataResult(VM result) {
assertNotNull(result);
assertEquals(EXISTING_VM_POOL_ID, result.getVmPoolId());
}
}