package org.ovirt.engine.core.dao;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.io.Serializable;
import org.dbunit.dataset.IDataSet;
import org.dbunit.operation.DatabaseOperation;
import org.junit.Test;
import org.ovirt.engine.core.common.businessentities.BusinessEntity;
public abstract class BaseGenericDaoTestCase<ID extends Serializable, T extends BusinessEntity<ID>,
D extends GenericDao<T, ID>> extends BaseReadDaoTestCase<ID, T, D> {
public BaseGenericDaoTestCase() {
super();
}
/**
* Ensures that saving a disk image works as expected.
*/
@Test
public void testSave() {
T newEntity = generateNewEntity();
dao.save(newEntity);
T result = dao.get(newEntity.getId());
assertNotNull(result);
assertEquals(newEntity, result);
}
protected abstract T generateNewEntity();
/**
* Ensures that updating a disk image works as expected.
*/
@Test
public void testUpdate() {
updateExistingEntity();
dao.update(existingEntity);
T result = dao.get(existingEntity.getId());
assertNotNull(result);
assertEquals(existingEntity, result);
verifyUpdate(existingEntity, result);
}
protected abstract void updateExistingEntity();
protected void verifyUpdate(T existingEntity, T result) {
}
/**
* Ensures that removing a disk image works as expected.
*/
@Test
public void testRemove() {
dao.remove(existingEntity.getId());
T result = dao.get(existingEntity.getId());
assertNull(result);
}
protected void reinitializeDatabase() {
try {
final IDataSet dataset = initDataSet();
DatabaseOperation.CLEAN_INSERT.execute(getConnection(), dataset);
} catch (Exception ex) {
throw new RuntimeException("Database reinitialization failed", ex);
}
}
}