package org.ovirt.engine.core.dao; import static org.junit.Assert.*; 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.tags_user_group_map; import org.ovirt.engine.core.common.businessentities.tags_user_map; import org.ovirt.engine.core.common.businessentities.tags_vds_map; import org.ovirt.engine.core.common.businessentities.tags_vm_map; import org.ovirt.engine.core.compat.Guid; /** * <code>TagDAOTest</code> 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 FREE_VM_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 tags_user_group_map existingUserGroupTag; private tags_user_map existingUserTag; private tags_vds_map existingVdsTag; private tags_vds_map newVdsTag; private tags_vm_map existingVmTag; private tags_vm_map newVmTag; private Guid vmPool; @Override @Before public void setUp() throws Exception { super.setUp(); dao = prepareDAO(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"); vmPool = new Guid("103cfd1d-18b1-4790-8a0c-1e52621b0076"); newTag = new tags(); newTag.settag_name("newtagname"); newTag.setIsReadonly(true); newTag.setdescription("newtagdescription"); newTag.setparent_id(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 tags_vds_map(EXISTING_TAG_ID, FREE_VDS_ID); existingVmTag = dao.getTagVmByTagIdAndByVmId(EXISTING_TAG_ID, EXISTING_VM_ID); newVmTag = new tags_vm_map(EXISTING_TAG_ID, FREE_VM_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.gettag_id()); 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.gettag_name()); 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.getparent_id()); } } /** * 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.getAllForVm(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.gettag_id().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.gettag_id()); 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.gettag_id()); assertEquals(existingTag, result); } /** * Ensures that removing a tag works as expected. */ @Test public void testRemove() { dao.remove(existingTag.gettag_id()); tags result = dao.get(existingTag.gettag_id()); assertNull(result); } @Test public void testGetTagUserGroupByGroupIdAndTagId() { tags_user_group_map result = dao.getTagUserGroupByGroupIdAndByTagId(existingUserGroupTag.gettag_id(), existingUserGroupTag.getgroup_id()); assertNotNull(result); assertEqualsTagUserGroupMap(existingUserGroupTag,result); } private void assertEqualsTagUserGroupMap(tags_user_group_map existing, tags_user_group_map result) { assertEquals("Group IDs not equal",existing.getgroup_id(), result.getgroup_id()); assertEquals("Tag IDs not equal",existing.gettag_id(), result.gettag_id()); assertEquals("Object equation",existing,result); } @Test public void testDetachUserGroupFromTag() { dao.detachUserGroupFromTag(existingUserGroupTag.gettag_id(), existingUserGroupTag.getgroup_id()); tags_user_group_map result = dao.getTagUserGroupByGroupIdAndByTagId(existingUserGroupTag.gettag_id(), existingUserGroupTag.getgroup_id()); assertNull(result); } @Test public void testGetAllUserGroupMapsForTagName() { List<tags_user_group_map> result = dao.getTagUserGroupMapsForTagName(existingTag.gettag_name()); assertNotNull(result); assertFalse(result.isEmpty()); for (tags_user_group_map mapping : result) { assertEquals(existingTag.gettag_id(), mapping.gettag_id()); } } @Test public void testGetUserTag() { tags_user_map result = dao.getTagUserByTagIdAndByuserId(existingUserTag.gettag_id(), existingUserTag.getuser_id()); assertNotNull(result); assertEqualsTagUserMap(existingUserTag,result); } private void assertEqualsTagUserMap(tags_user_map existing, tags_user_map result) { assertEquals("Tag ID is not equal",existing.gettag_id(), result.gettag_id()); assertEquals("USER ID is not equal",existing.getuser_id(), result.getuser_id()); assertEquals("Object equation",existing,result); } @Test public void testGetTagUserMapByTagName() { List<tags_user_map> result = dao.getTagUserMapByTagName(existingTag.gettag_name()); assertNotNull(result); assertFalse(result.isEmpty()); for (tags_user_map mapping : result) { assertEquals(existingTag.gettag_id(), mapping.gettag_id()); } } @Test public void testGetTagVdsMap() { tags_vds_map result = dao.getTagVdsByTagIdAndByVdsId(existingVdsTag.gettag_id(), existingVdsTag.getvds_id()); assertNotNull(result); assertEqualsTagsVdsMap(existingVdsTag,result); } private void assertEqualsTagsVdsMap(tags_vds_map existing, tags_vds_map result) { assertEquals("Tag ID is not equal",existing.gettag_id(), result.gettag_id()); assertEquals("VDS ID is not equal",existing.getvds_id(), result.getvds_id()); assertEquals("Object equation",existing,result); } @Test public void testAttachVdsToTag() { dao.attachVdsToTag(newVdsTag); tags_vds_map result = dao.getTagVdsByTagIdAndByVdsId(newVdsTag.gettag_id(), newVdsTag.getvds_id()); assertNotNull(result); assertEqualsTagsVdsMap(newVdsTag,result); } @Test public void testDetachVdsFromTag() { dao.detachVdsFromTag(existingVdsTag.gettag_id(), existingVdsTag.getvds_id()); tags_vds_map result = dao.getTagVdsByTagIdAndByVdsId(existingVdsTag.gettag_id(), existingVdsTag.getvds_id()); assertNull(result); } @Test public void testGetTagVdsMapByTagName() { List<tags_vds_map> result = dao.getTagVdsMapByTagName(existingTag.gettag_name()); assertNotNull(result); assertFalse(result.isEmpty()); for (tags_vds_map mapping : result) { assertEquals(existingTag.gettag_id(), mapping.gettag_id()); } } @Test public void testGetTagVmMapByTag() { tags_vm_map result = dao.getTagVmByTagIdAndByVmId(existingVmTag.gettag_id(), existingVmTag.getvm_id()); assertNotNull(result); assertEqualsTagsVmMap(existingVmTag, result); } private void assertEqualsTagsVmMap(tags_vm_map existing, tags_vm_map result) { assertEquals("TG is not equal",existing.gettag_id(),result.gettag_id()); assertEquals("VM id not equal ",existing.getvm_id(),result.getvm_id()); assertEquals("Object equation",existing,result); } @Test public void testAttachVmToTag() { dao.attachVmToTag(newVmTag); tags_vm_map result = dao.getTagVmByTagIdAndByVmId(newVmTag.gettag_id(), newVmTag.getvm_id()); assertNotNull(result); assertEqualsTagsVmMap(newVmTag, result); } @Test public void updateVmTag() { existingVmTag.setDefaultDisplayType(existingVmTag.getDefaultDisplayType() + 1); dao.updateDefaultDisplayForVmTag(existingVmTag); tags_vm_map result = dao.getTagVmByTagIdAndByVmId(existingVmTag.gettag_id(), existingVmTag.getvm_id()); assertNotNull(result); assertEqualsTagsVmMap(existingVmTag, result); } @Test public void testDetachVmFromTag() { dao.detachVmFromTag(existingVmTag.gettag_id(), existingVmTag.getvm_id()); tags_vm_map result = dao.getTagVmByTagIdAndByVmId(existingVmTag.gettag_id(), existingVmTag.getvm_id()); assertNull(result); } @Test public void testGetTagVmMapByTagName() { List<tags_vm_map> result = dao.getTagVmMapByTagName(existingTag.gettag_name()); assertNotNull(result); assertFalse(result.isEmpty()); for (tags_vm_map mapping : result) { assertEquals(existingTag.gettag_id(), mapping.gettag_id()); } } @Test public void testGetTagVmMapByByVmIdAndDefaultTag() { List<tags_vm_map> result = dao.getTagVmMapByVmIdAndDefaultTag(EXISTING_VM_ID); assertNotNull(result); assertFalse(result.isEmpty()); for (tags_vm_map mapping : result) { assertEquals(EXISTING_VM_ID, mapping.getvm_id()); } } }