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.Before;
import org.junit.Test;
import org.ovirt.engine.core.common.businessentities.Tags;
import org.ovirt.engine.core.common.businessentities.TagsTemplateMap;
import org.ovirt.engine.core.common.businessentities.TagsUserGroupMap;
import org.ovirt.engine.core.common.businessentities.TagsUserMap;
import org.ovirt.engine.core.common.businessentities.TagsVdsMap;
import org.ovirt.engine.core.common.businessentities.TagsVmMap;
import org.ovirt.engine.core.compat.Guid;
/**
* {@code TagDaoTest} provides unit tests to validate the functionality for {@link TagDao}.
*/
public class TagDaoTest extends BaseDaoTestCase {
private static final Guid EXISTING_TAG_ID = new Guid("d3ec3e01-ca89-48e1-8b43-a9b38f873b0c");
private static final int TAG_COUNT = 3;
private static final Guid EXISTING_GROUP_ID = new Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1");
private static final Guid EXISTING_USER_ID = new Guid("9bf7c640-b620-456f-a550-0348f366544a");
private static final Guid EXISTING_VDS_ID = new Guid("afce7a39-8e8c-4819-ba9c-796d316592e6");
private static final Guid FREE_VDS_ID = new Guid("afce7a39-8e8c-4819-ba9c-796d316592e7");
private static final Guid EXISTING_VM_ID = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4355");
private static final Guid EXISTING_TEMPLATE_ID = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4355");
private static final Guid FREE_VM_ID = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4354");
private static final Guid FREE_TEMPLATE_ID = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4354");
private TagDao dao;
private Tags newTag;
private Tags existingTag;
private Guid parent;
private Guid user;
private Guid vm;
private Guid template;
private TagsUserGroupMap existingUserGroupTag;
private TagsUserMap existingUserTag;
private TagsVdsMap existingVdsTag;
private TagsVdsMap newVdsTag;
private TagsVmMap existingVmTag;
private TagsTemplateMap existingTemplateTag;
private TagsVmMap newVmTag;
private TagsTemplateMap newTemplateTag;
private Guid vmPool;
@Override
@Before
public void setUp() throws Exception {
super.setUp();
dao = dbFacade.getTagDao();
existingTag = dao.get(EXISTING_TAG_ID);
existingTag = dao.get(new Guid("d3ec3e01-ca89-48e1-8b43-a9b38f873b0c"));
parent = new Guid("6d849ebf-755f-4552-ad09-9a090cda105d");
user = new Guid("9bf7c640-b620-456f-a550-0348f366544a");
vm = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4355");
template = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4355");
vmPool = new Guid("103cfd1d-18b1-4790-8a0c-1e52621b0076");
newTag = new Tags();
newTag.setTagName("newtagname");
newTag.setIsReadonly(true);
newTag.setDescription("newtagdescription");
newTag.setParentId(parent);
existingUserGroupTag = dao.getTagUserGroupByGroupIdAndByTagId(EXISTING_TAG_ID, EXISTING_GROUP_ID);
existingUserTag = dao.getTagUserByTagIdAndByuserId(EXISTING_TAG_ID, EXISTING_USER_ID);
existingVdsTag = dao.getTagVdsByTagIdAndByVdsId(EXISTING_TAG_ID, EXISTING_VDS_ID);
newVdsTag = new TagsVdsMap(EXISTING_TAG_ID, FREE_VDS_ID);
existingVmTag = dao.getTagVmByTagIdAndByVmId(EXISTING_TAG_ID, EXISTING_VM_ID);
existingTemplateTag = dao.getTagTemplateByTagIdAndByTemplateId(EXISTING_TAG_ID, EXISTING_TEMPLATE_ID);
newVmTag = new TagsVmMap(EXISTING_TAG_ID, FREE_VM_ID);
newTemplateTag = new TagsTemplateMap(EXISTING_TAG_ID, FREE_TEMPLATE_ID);
}
/**
* Ensures that using an invalid id returns no tag.
*/
@Test
public void testGetWithInvalidId() {
Tags result = dao.get(Guid.newGuid());
assertNull(result);
}
/**
* Ensures that getting a tag by id works as expected.
*/
@Test
public void testGet() {
Tags result = dao.get(existingTag.getTagId());
assertNotNull(result);
assertEquals(existingTag, result);
}
/**
* Ensures that using an invalid name returns no tag.
*/
@Test
public void testGetByNameWithInvalidName() {
Tags result = dao.getByName("invalidtagname");
assertNull(result);
}
/**
* Ensures that retrieving a tag by name works as expected.
*/
@Test
public void testGetByName() {
Tags result = dao.getByName(existingTag.getTagName());
assertNotNull(result);
assertEquals(existingTag, result);
}
@Test
public void testGetAll() {
List<Tags> result = dao.getAll();
assertNotNull(result);
assertEquals(TAG_COUNT, result.size());
}
/**
* Ensures that getting all tags for a parent with no tags returns an empty collection.
*/
@Test
public void testGetAllForParentWithInvalidParent() {
List<Tags> result = dao.getAllForParent(Guid.newGuid());
assertNotNull(result);
assertTrue(result.isEmpty());
}
/**
* Ensures that getting all tags for a parent works as expected.
*/
@Test
public void testGetAllForParent() {
List<Tags> result = dao.getAllForParent(parent);
assertNotNull(result);
assertFalse(result.isEmpty());
for (Tags tag : result) {
assertEquals(parent, tag.getParentId());
}
}
/**
* Ensures that an empty collection is returned when the specified user group has no tags.
*/
@Test
public void testGetAllForUserGroupWithInvalidUserGroup() {
List<Tags> result = dao.getAllForUserGroups(Guid.newGuid().toString());
assertNotNull(result);
assertTrue(result.isEmpty());
}
/**
* Ensures that all tags for the specified user group are returned.
*/
@Test
public void testGetAllForUserGroup() {
List<Tags> result = dao
.getAllForUserGroups("b399944a-81ab-4ec5-8266-e19ba7c3c9d1");
assertNotNull(result);
assertFalse(result.isEmpty());
//FIXME: Fix this test - userGroup is not set
/*
Guid userGroupId = new Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1");
for (tags tag : result) {
assertEquals(userGroupId, tag.getUserGroup().getId());
}*/
}
/**
* Ensures that getting all tags for a user with no tags returns an empty collection.
*/
@Test
public void testGetAllForUserWithInvalidUser() {
List<Tags> result = dao.getAllForUsers(Guid.newGuid().toString());
assertNotNull(result);
assertTrue(result.isEmpty());
}
/**
* Ensures that the right set of tags are returned for a specified user.
*/
@Test
public void testGetAllForUser() {
List<Tags> result = dao.getAllForUsers(user.getUuid().toString());
assertNotNull(result);
assertFalse(result.isEmpty());
}
/**
* Ensures that an empty collection is returned.
*/
@Test
public void testGetAllForUserIdsWithInvalidIds() {
List<Tags> result = dao.getAllForUsersWithIds(Guid.newGuid().getUuid()
.toString());
assertNotNull(result);
assertTrue(result.isEmpty());
}
/**
* Ensures that a collection of tags are returned.
*/
@Test
public void testGetAllForUserIds() {
List<Tags> result = dao
.getAllForUsersWithIds("d3ec3e01-ca89-48e1-8b43-a9b38f873b0c");
assertNotNull(result);
assertFalse(result.isEmpty());
}
/**
* Asserts that an VDS with no tags returns an empty collection.
*/
@Test
public void testGetAllForVdsWithInvalidVds() {
List<Tags> result = dao.getAllForVds(Guid.newGuid().getUuid()
.toString());
assertNotNull(result);
assertTrue(result.isEmpty());
}
/**
* Ensures that a set of tags are returned.
*/
@Test
public void testGetAllForVds() {
List<Tags> result = dao
.getAllForVds("afce7a39-8e8c-4819-ba9c-796d316592e6");
assertNotNull(result);
assertFalse(result.isEmpty());
}
/**
* Ensures that an empty collection is returned.
*/
@Test
public void testGetAllForVmWithInvalidVm() {
List<Tags> result = dao
.getAllForVm(Guid.newGuid().getUuid().toString());
assertNotNull(result);
assertTrue(result.isEmpty());
}
/**
* Ensures that a collection of tags is returned.
*/
@Test
public void testGetAllForVm() {
List<Tags> result = dao.getAllForTemplate(template.getUuid().toString());
assertNotNull(result);
assertFalse(result.isEmpty());
}
/**
* Ensures that an empty collection is returned.
*/
@Test
public void testGetAllForVmWithInvalidTemplate() {
List<Tags> result = dao
.getAllForTemplate(Guid.newGuid().getUuid().toString());
assertNotNull(result);
assertTrue(result.isEmpty());
}
/**
* Ensures that a collection of tags is returned.
*/
@Test
public void testGetAllForTemplate() {
List<Tags> result = dao.getAllForTemplate(vm.getUuid().toString());
assertNotNull(result);
assertFalse(result.isEmpty());
}
/**
* Ensures that all tags from the given list that have VMs associated with them are returned.
*/
@Test
public void testGetAllVmTagsWithIds() {
List<Tags> result = dao.getAllVmTagsWithIds(existingTag.getTagId().toString());
assertNotNull(result);
assertFalse(result.isEmpty());
}
/**
* Ensures that all tags for the specified VM pool are returned.
*/
@Test
public void testGetAllForVmPools() {
List<Tags> result = dao.getAllForVmPools(vmPool.toString());
assertNotNull(result);
assertFalse(result.isEmpty());
}
/**
* Ensures that saving a tag works as expected.
*/
@Test
public void testSave() {
dao.save(newTag);
Tags result = dao.get(newTag.getTagId());
assertNotNull(result);
assertEquals(newTag, result);
}
/**
* Ensures that updating a tag in the database works as expected.
*/
@Test
public void testUpdate() {
existingTag.setDescription("this is the updated description!");
dao.update(existingTag);
Tags result = dao.get(existingTag.getTagId());
assertEquals(existingTag, result);
}
/**
* Ensures that removing a tag works as expected.
*/
@Test
public void testRemove() {
dao.remove(existingTag.getTagId());
Tags result = dao.get(existingTag.getTagId());
assertNull(result);
}
@Test
public void testGetTagUserGroupByGroupIdAndTagId() {
TagsUserGroupMap result = dao.getTagUserGroupByGroupIdAndByTagId(existingUserGroupTag.getTagId(),
existingUserGroupTag.getGroupId());
assertNotNull(result);
assertEqualsTagUserGroupMap(existingUserGroupTag, result);
}
private void assertEqualsTagUserGroupMap(TagsUserGroupMap existing, TagsUserGroupMap result) {
assertEquals("Group IDs not equal", existing.getGroupId(), result.getGroupId());
assertEquals("Tag IDs not equal", existing.getTagId(), result.getTagId());
assertEquals("Object equation", existing, result);
}
@Test
public void testDetachUserGroupFromTag() {
dao.detachUserGroupFromTag(existingUserGroupTag.getTagId(), existingUserGroupTag.getGroupId());
TagsUserGroupMap result = dao.getTagUserGroupByGroupIdAndByTagId(existingUserGroupTag.getTagId(),
existingUserGroupTag.getGroupId());
assertNull(result);
}
@Test
public void testGetUserTag() {
TagsUserMap result =
dao.getTagUserByTagIdAndByuserId(existingUserTag.getTagId(), existingUserTag.getUserId());
assertNotNull(result);
assertEqualsTagUserMap(existingUserTag, result);
}
private void assertEqualsTagUserMap(TagsUserMap existing, TagsUserMap result) {
assertEquals("Tag ID is not equal", existing.getTagId(), result.getTagId());
assertEquals("USER ID is not equal", existing.getUserId(), result.getUserId());
assertEquals("Object equation", existing, result);
}
@Test
public void testGetTagVdsMap() {
TagsVdsMap result = dao.getTagVdsByTagIdAndByVdsId(existingVdsTag.getTagId(), existingVdsTag.getVdsId());
assertNotNull(result);
assertEqualsTagsVdsMap(existingVdsTag, result);
}
private void assertEqualsTagsVdsMap(TagsVdsMap existing, TagsVdsMap result) {
assertEquals("Tag ID is not equal", existing.getTagId(), result.getTagId());
assertEquals("VDS ID is not equal", existing.getVdsId(), result.getVdsId());
assertEquals("Object equation", existing, result);
}
@Test
public void testAttachVdsToTag() {
dao.attachVdsToTag(newVdsTag);
TagsVdsMap result = dao.getTagVdsByTagIdAndByVdsId(newVdsTag.getTagId(), newVdsTag.getVdsId());
assertNotNull(result);
assertEqualsTagsVdsMap(newVdsTag, result);
}
@Test
public void testDetachVdsFromTag() {
dao.detachVdsFromTag(existingVdsTag.getTagId(), existingVdsTag.getVdsId());
TagsVdsMap result = dao.getTagVdsByTagIdAndByVdsId(existingVdsTag.getTagId(), existingVdsTag.getVdsId());
assertNull(result);
}
@Test
public void testGetTagVmMapByTag() {
TagsVmMap result = dao.getTagVmByTagIdAndByVmId(existingVmTag.getTagId(), existingVmTag.getVmId());
assertNotNull(result);
assertEqualsTagsVmMap(existingVmTag, result);
}
@Test
public void testGetTagTemplateMapByTag() {
TagsTemplateMap result = dao.getTagTemplateByTagIdAndByTemplateId(existingTemplateTag.getTagId(), existingTemplateTag.getTemplateId());
assertNotNull(result);
assertEqualsTagsTemplateMap(existingTemplateTag, result);
}
private void assertEqualsTagsVmMap(TagsVmMap existing, TagsVmMap result) {
assertEquals("TG is not equal", existing.getTagId(), result.getTagId());
assertEquals("VM id not equal ", existing.getVmId(), result.getVmId());
assertEquals("Object equation", existing, result);
}
private void assertEqualsTagsTemplateMap(TagsTemplateMap existing, TagsTemplateMap result) {
assertEquals("TG is not equal", existing.getTagId(), result.getTagId());
assertEquals("Template id not equal ", existing.getTemplateId(), result.getTemplateId());
assertEquals("Object equation", existing, result);
}
@Test
public void testAttachVmToTag() {
dao.attachVmToTag(newVmTag);
TagsVmMap result = dao.getTagVmByTagIdAndByVmId(newVmTag.getTagId(), newVmTag.getVmId());
assertNotNull(result);
assertEqualsTagsVmMap(newVmTag, result);
}
@Test
public void testAttachTemplateToTag() {
dao.attachTemplateToTag(newTemplateTag);
TagsTemplateMap result = dao.getTagTemplateByTagIdAndByTemplateId(newTemplateTag.getTagId(), newTemplateTag.getTemplateId());
assertNotNull(result);
assertEqualsTagsTemplateMap(newTemplateTag, result);
}
@Test
public void updateVmTag() {
existingVmTag.setDefaultDisplayType(existingVmTag.getDefaultDisplayType() + 1);
dao.updateDefaultDisplayForVmTag(existingVmTag);
TagsVmMap result = dao.getTagVmByTagIdAndByVmId(existingVmTag.getTagId(), existingVmTag.getVmId());
assertNotNull(result);
assertEqualsTagsVmMap(existingVmTag, result);
}
@Test
public void testDetachVmFromTag() {
dao.detachVmFromTag(existingVmTag.getTagId(), existingVmTag.getVmId());
TagsVmMap result = dao.getTagVmByTagIdAndByVmId(existingVmTag.getTagId(), existingVmTag.getVmId());
assertNull(result);
}
@Test
public void testDetachTemplateFromTag() {
dao.detachTemplateFromTag(existingTemplateTag.getTagId(), existingTemplateTag.getTemplateId());
TagsTemplateMap result = dao.getTagTemplateByTagIdAndByTemplateId(existingTemplateTag.getTagId(), existingTemplateTag.getTemplateId());
assertNull(result);
}
@Test
public void testGetTagVmMapByByVmIdAndDefaultTag() {
List<TagsVmMap> result = dao.getTagVmMapByVmIdAndDefaultTag(EXISTING_VM_ID);
assertNotNull(result);
assertFalse(result.isEmpty());
for (TagsVmMap mapping : result) {
assertEquals(EXISTING_VM_ID, mapping.getVmId());
}
}
}