package org.rhq.core.domain.resource;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.apache.commons.collections.iterators.ArrayListIterator;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.unitils.UnitilsTestNG;
import org.unitils.dbunit.annotation.DataSet;
import org.unitils.orm.jpa.annotation.JpaEntityManagerFactory;
import static org.rhq.core.domain.resource.ResourceType.QUERY_FIND_ALL;
import static org.rhq.core.domain.resource.ResourceType.QUERY_FIND_BY_NAME_AND_PLUGIN;
import static org.rhq.core.domain.resource.ResourceType.QUERY_FIND_BY_PLUGIN;
import static org.rhq.core.domain.resource.ResourceType.QUERY_FIND_CHILDREN;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
@JpaEntityManagerFactory(persistenceUnit = "rhq-test", configFile = "META-INF/test-persistence.xml")
@DataSet
public class ResourceTypeTest extends UnitilsTestNG {
static final String TEST_GROUP_DEPS = "integration.ejb3";
@BeforeClass(groups = "unitils", dependsOnGroups = TEST_GROUP_DEPS)
public void init() {
}
@PersistenceContext
EntityManager entityMgr;
@Test(groups = "unitils", dependsOnGroups = TEST_GROUP_DEPS)
public void findByPlugin() {
List<ResourceType> results = entityMgr.createNamedQuery(QUERY_FIND_BY_PLUGIN)
.setParameter("plugin", "TestPlugin1")
.getResultList();
assertEquals(results.size(), 1, "Expected to get back 1 resource type");
assertEquals(results.get(0).getId(), -1, "The wrong resource type was returned");
}
@Test(groups = "unitils", dependsOnGroups = TEST_GROUP_DEPS)
public void findByNameAndPlugin() {
ResourceType type = (ResourceType) entityMgr.createNamedQuery(QUERY_FIND_BY_NAME_AND_PLUGIN)
.setParameter("name", "TestServer1")
.setParameter("plugin", "TestPlugin1")
.getSingleResult();
assertEquals(type.getId(), -1, "Failed to find resource type by name and by plugin");
}
@Test(groups = "unitils", dependsOnGroups = TEST_GROUP_DEPS)
public void findByNameAndPluginShouldNotReturnDeletedType() {
List results = entityMgr.createNamedQuery(QUERY_FIND_BY_NAME_AND_PLUGIN)
.setParameter("name", "TestServer2")
.setParameter("plugin", "TestPlugin1")
.getResultList();
assertEquals(results.size(), 0, "Deleted types should be ignored");
}
@Test(groups = "unitils", dependsOnGroups = TEST_GROUP_DEPS)
@SuppressWarnings("unchecked")
public void findAll() {
List<ResourceType> results = entityMgr.createNamedQuery(QUERY_FIND_ALL).getResultList();
assertTrue(results.size() > 0, "Expected a non-empty result set");
assertDeletedTypesIgnored(results);
}
@Test(groups = "unitils", dependsOnGroups = TEST_GROUP_DEPS)
@SuppressWarnings("unchecked")
public void findChildren() {
List<ResourceType> results = entityMgr.createNamedQuery(QUERY_FIND_CHILDREN)
.setParameter("resourceTypeId", -4)
.getResultList();
assertEquals(results.size(), 2, "Expected to get two resource types for resource type with id -4");
assertDeletedTypesIgnored(results);
}
@Test(groups = "unitils", dependsOnGroups = TEST_GROUP_DEPS)
@SuppressWarnings("unchecked")
public void findDriftDefinitionTemplates() {
ResourceType type = entityMgr.find(ResourceType.class, -8);
assertEquals(type.getDriftDefinitionTemplates().size(), 2);
}
void assertDeletedTypesIgnored(List<ResourceType> types) {
List<ResourceType> deletedTypes = new ArrayList<ResourceType>();
for (ResourceType type : types) {
if (type.isDeleted()) {
deletedTypes.add(type);
}
}
assertTrue(deletedTypes.size() == 0, "Deleted types should be ignored. The following deleted types were " +
"found: " + deletedTypes);
}
}