package org.rhq.enterprise.server.measurement.test; import java.util.ArrayList; import java.util.List; import javax.persistence.Query; import org.testng.annotations.Test; import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.measurement.MeasurementDefinition; import org.rhq.core.domain.measurement.MeasurementSchedule; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.resource.ResourceCategory; import org.rhq.core.domain.resource.ResourceType; import org.rhq.enterprise.server.auth.SubjectManagerLocal; import org.rhq.enterprise.server.measurement.MeasurementViewManagerLocal; import org.rhq.enterprise.server.test.AbstractEJB3Test; import org.rhq.enterprise.server.util.LookupUtil; import org.rhq.enterprise.server.util.ResourceTreeHelper; public class MeasurementViewManagerTest extends AbstractEJB3Test { private MeasurementViewManagerLocal viewManager; private SubjectManagerLocal subjectManager; private static final int SIZE = 5; private ResourceType type; private List<Resource> resources; private List<MeasurementDefinition> definitions; private List<MeasurementSchedule> schedules; private Subject overlord; @Test public void testAll() { // TODO: jmarques - write unit tests for MeasurementViewManager } @Override protected void beforeMethod() throws Exception { viewManager = LookupUtil.getMeasurementViewManager(); subjectManager = LookupUtil.getSubjectManager(); overlord = subjectManager.getOverlord(); getTransactionManager().begin(); try { String prefix = MeasurementViewManagerTest.class.getSimpleName(); type = new ResourceType(prefix + "type", prefix + "plugin", ResourceCategory.PLATFORM, null); em.persist(type); resources = new ArrayList<Resource>(); for (int i = 0; i < SIZE; i++) { Resource resource = new Resource(prefix + "key " + i, prefix + "key " + i, type); resource.setUuid(resource.getResourceKey()); resources.add(resource); em.persist(resource); } definitions = new ArrayList<MeasurementDefinition>(); for (int i = 0; i < SIZE; i++) { MeasurementDefinition definition = new MeasurementDefinition(type, prefix + "definition " + i); definitions.add(definition); type.addMetricDefinition(definition); em.persist(definition); } type = em.merge(type); schedules = new ArrayList<MeasurementSchedule>(); for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { MeasurementDefinition definition = definitions.get(i); Resource resource = resources.get(j); MeasurementSchedule schedule = new MeasurementSchedule(definition, resource); schedules.add(schedule); definition.addSchedule(schedule); resource.addSchedule(schedule); em.persist(schedule); } } for (int i = 0; i < SIZE; i++) { MeasurementDefinition definition = definitions.get(i); definitions.set(i, em.merge(definition)); } for (int j = 0; j < SIZE; j++) { Resource resource = resources.get(j); resources.set(j, em.merge(resource)); } } finally { getTransactionManager().commit(); } } @Override protected void afterMethod() throws Exception { getTransactionManager().begin(); try { List<Integer> measurementDefinitionIds = new ArrayList<Integer>(); for (int i = 0; i < definitions.size(); i++) { measurementDefinitionIds.add(definitions.get(i).getId()); } Query removeSchedules = em .createQuery("delete from MeasurementSchedule ms where ms.definition.id IN ( :ids ) "); removeSchedules.setParameter("ids", measurementDefinitionIds); removeSchedules.executeUpdate(); List<Integer> resourceIds = new ArrayList<Integer>(); for (int i = 0; i < resources.size(); i++) { resourceIds.add(resources.get(i).getId()); } if (type != null) { Query removeDefinitions = em .createQuery("delete from MeasurementDefinition md where md.resourceType.id = :resourceTypeId "); removeDefinitions.setParameter("resourceTypeId", type.getId()); removeDefinitions.executeUpdate(); } for (int resourceId : resourceIds) { Resource r = em.find(Resource.class, resourceId); ResourceTreeHelper.deleteResource(em, r); } if (type != null) { type = em.find(ResourceType.class, type.getId()); em.remove(type); } } finally { getTransactionManager().commit(); } } }