/*
* RHQ Management Platform
* Copyright (C) 2005-2008 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 2, as
* published by the Free Software Foundation, and/or the GNU Lesser
* General Public License, version 2.1, also as published by the Free
* Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License and the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License
* and the GNU Lesser General Public License along with this program;
* if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.rhq.core.domain.resource.test;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.testng.annotations.Test;
import org.rhq.core.domain.measurement.Availability;
import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.test.AbstractEJB3Test;
public class ResourceTest extends AbstractEJB3Test {
@Test(groups = "integration.ejb3")
public void testCreateAlotOfResources() throws Exception {
Agent theAgent;
ResourceType theResourceType;
List<Resource> resources = new ArrayList<Resource>();
long start;
final int count = 2000;
EntityManager em = getEntityManager();
start = System.currentTimeMillis();
getTransactionManager().begin();
try {
theAgent = new Agent("testCreateAlotOfResources", "localhost", 1234, "", "anotherToken");
em.persist(theAgent);
theResourceType = new ResourceType("testCreateAlotOfResources", "test-plugin", ResourceCategory.PLATFORM,
null);
em.persist(theResourceType);
for (int i = 0; i < count; i++) {
Resource newResource = new Resource("testCreateAlotOfResources" + i, "res" + i, theResourceType);
newResource.setUuid("" + new Random().nextInt());
newResource.setAgent(theAgent);
em.persist(newResource);
resources.add(newResource);
}
} finally {
getTransactionManager().commit();
}
System.out.println("Took [" + (System.currentTimeMillis() - start) + "]ms to create [" + count + "] resources");
start = System.currentTimeMillis();
getTransactionManager().begin();
try {
for (int i = 0; i < count; i++) {
Resource doomedResource = em.find(Resource.class, resources.get(i).getId());
deleteResource(em, doomedResource);
}
em.remove(em.find(ResourceType.class, theResourceType.getId()));
em.remove(em.find(Agent.class, theAgent.getId()));
} finally {
getTransactionManager().commit();
}
System.out.println("Took [" + (System.currentTimeMillis() - start) + "]ms to remove [" + count + "] resources");
}
private static void deleteResource(EntityManager entityManager, Resource doomedResource) {
if (null == doomedResource) {
return;
}
for (Availability avail : doomedResource.getAvailability()) {
entityManager.remove(avail);
}
entityManager.remove(doomedResource);
}
@Test(groups = "integration.ejb3")
public void testCreateAlotOfResourcesWithAvailabilities() throws Exception {
Agent theAgent;
ResourceType theResourceType;
List<Resource> resources = new ArrayList<Resource>();
long start;
final int count = 2000;
EntityManager em = getEntityManager();
start = System.currentTimeMillis();
getTransactionManager().begin();
try {
theAgent = new Agent("testCreateAlotOfResources", "localhost", 1234, "", "someToken");
em.persist(theAgent);
theResourceType = new ResourceType("testCreateAlotOfResources", "test-plugin", ResourceCategory.PLATFORM,
null);
em.persist(theResourceType);
for (int i = 0; i < count; i++) {
Resource newResource = new Resource("testCreateAlotOfResources" + i, "res" + i, theResourceType);
newResource.setUuid("" + new Random().nextInt());
newResource.setAgent(theAgent);
em.persist(newResource);
resources.add(newResource);
em.persist(new Availability(newResource, AvailabilityType.UP));
}
} finally {
getTransactionManager().commit();
}
System.out.println("Took [" + (System.currentTimeMillis() - start) + "]ms to create [" + count
+ "] resources with availabilities");
start = System.currentTimeMillis();
getTransactionManager().begin();
try {
for (int i = 0; i < count; i++) {
Resource doomedResource = em.find(Resource.class, resources.get(i).getId());
deleteResource(em, doomedResource);
}
em.remove(em.find(ResourceType.class, theResourceType.getId()));
em.remove(em.find(Agent.class, theAgent.getId()));
} finally {
getTransactionManager().commit();
}
System.out.println("Took [" + (System.currentTimeMillis() - start) + "]ms to remove [" + count
+ "] resources with availabilities");
}
@Test(groups = "integration.ejb3")
public void testMediumPlatformCreate() {
int id = 0;
ResourceType platformType = new ResourceType("FakePlatform", "FakePlugin", ResourceCategory.PLATFORM, null);
ResourceType serverType = new ResourceType("FakeServer", "FakePlugin", ResourceCategory.SERVER, platformType);
ResourceType serviceType = new ResourceType("FakeService", "FakePlugin", ResourceCategory.SERVICE, serverType);
Resource p = new Resource("Test.fqdn", "TestPlatform", platformType);
Resource s = new Resource("key", "name", serverType);
p.addChildResource(s);
for (int i = 0; i < 100; i++) {
String name = "TestService" + i;
Resource v = new Resource(name, name, serviceType);
v.setId(id++);
s.addChildResource(v);
}
//getEntityManager().persist(p);
}
@Test(groups = "integration.ejb3")
public void testCreateMultiParentTypes() throws Exception {
getTransactionManager().begin();
EntityManager em = getEntityManager();
try {
ResourceType parent1 = new ResourceType("parent1", "a", ResourceCategory.SERVER, null);
ResourceType parent2 = new ResourceType("parent2", "a", ResourceCategory.SERVER, null);
ResourceType child = new ResourceType("child", "a", ResourceCategory.SERVER, null);
em.persist(parent1);
em.persist(parent2);
em.persist(child);
child.addParentResourceType(parent1);
child = em.merge(child);
assert child.getParentResourceTypes().size() == 1;
assert parent1.getChildResourceTypes().size() == 1;
assert child.getParentResourceTypes().iterator().next().equals(parent1);
assert parent1.getChildResourceTypes().iterator().next().equals(child);
assert child.getChildResourceTypes().size() == 0;
assert parent1.getParentResourceTypes().size() == 0;
Query query = em.createNamedQuery(ResourceType.QUERY_FIND_BY_NAME_AND_PLUGIN);
query.setParameter("name", "child").setParameter("plugin", "a");
child = (ResourceType) query.getSingleResult();
query.setParameter("name", "parent1").setParameter("plugin", "a");
parent1 = (ResourceType) query.getSingleResult();
assert child.getParentResourceTypes().size() == 1;
assert parent1.getChildResourceTypes().size() == 1;
assert child.getParentResourceTypes().iterator().next().equals(parent1);
assert parent1.getChildResourceTypes().iterator().next().equals(child);
assert child.getChildResourceTypes().size() == 0;
assert parent1.getParentResourceTypes().size() == 0;
// now add our second parent
child.addParentResourceType(parent2);
child = em.merge(child);
assert child.getParentResourceTypes().size() == 2;
assert parent1.getChildResourceTypes().size() == 1;
assert parent2.getChildResourceTypes().size() == 1;
assert child.getParentResourceTypes().contains(parent1);
assert child.getParentResourceTypes().contains(parent2);
assert parent1.getChildResourceTypes().contains(child);
assert parent2.getChildResourceTypes().contains(child);
assert child.getChildResourceTypes().size() == 0;
assert parent1.getParentResourceTypes().size() == 0;
assert parent2.getParentResourceTypes().size() == 0;
query.setParameter("name", "child").setParameter("plugin", "a");
child = (ResourceType) query.getSingleResult();
query.setParameter("name", "parent1").setParameter("plugin", "a");
parent1 = (ResourceType) query.getSingleResult();
query.setParameter("name", "parent2").setParameter("plugin", "a");
parent2 = (ResourceType) query.getSingleResult();
assert child.getParentResourceTypes().size() == 2;
assert parent1.getChildResourceTypes().size() == 1;
assert parent2.getChildResourceTypes().size() == 1;
assert child.getParentResourceTypes().contains(parent1);
assert child.getParentResourceTypes().contains(parent2);
assert parent1.getChildResourceTypes().contains(child);
assert parent2.getChildResourceTypes().contains(child);
assert child.getChildResourceTypes().size() == 0;
assert parent1.getParentResourceTypes().size() == 0;
assert parent2.getParentResourceTypes().size() == 0;
} finally {
getTransactionManager().rollback();
}
}
}