.classpath
| 6
modules/core/domain/src/test/java/org/rhq/core/domain/test/AbstractEJB3Test.java
| 7
modules/enterprise/server/itests/pom.xml
| 51
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/alert/AlertDefinitionWithComplexNotificationsTest.java
| 12
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/AbstractDriftServerTest.java
| 2
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
| 2
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
| 2
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
| 2
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
| 2
modules/enterprise/server/jar/pom.xml
| 58
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
| 5
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java
| 5
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/group/test/LdapGroupManagerBeanTest.java
| 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MetadataBeanTest.java
| 16
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest.java
| 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdatePluginMetadataTestBase.java
| 10
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/scheduler/jobs/DataPurgeJobTest.java
| 14
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
| 751 ++++++----
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/LargeGroupTestBase.java
| 8
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/OldAbstractEJB3Test.java
| 445 +++++
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/TransactionCallback.java
| 7
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/TransactionCallbackReturnable.java
| 7
modules/test-utils/src/main/java/org/rhq/test/JPAUtils.java
| 149 -
23 files changed, 1104 insertions(+), 461 deletions(-)
New commits:
commit 42d055452d1c9784053c1853daab063cd94ae484
Author: Jay Shaughnessy <jshaughn(a)jshaughn.csb>
Date: Mon Oct 22 14:09:17 2012 -0400
Just get things to build after removal of embeddable ejb3 and
new AbstractEJB3Test based on Arquillian. Not close to running,
lots of band-aids and placeholders...
diff --git
a/modules/core/domain/src/test/java/org/rhq/core/domain/test/AbstractEJB3Test.java
b/modules/core/domain/src/test/java/org/rhq/core/domain/test/AbstractEJB3Test.java
index 711630b..a83b0ef 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/test/AbstractEJB3Test.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/test/AbstractEJB3Test.java
@@ -16,6 +16,7 @@ import javax.persistence.PersistenceContext;
import javax.transaction.TransactionManager;
import org.testng.AssertJUnit;
+import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.jboss.arquillian.container.test.api.Deployment;
@@ -228,7 +229,7 @@ public abstract class AbstractEJB3Test extends Arquillian {
*
* Instead, override {@link #afterMethod()}.
*/
- @BeforeMethod
+ @AfterMethod(alwaysRun = true)
protected void __afterMethod() throws Exception {
// currently no special handling necessary
afterMethod();
@@ -373,11 +374,11 @@ public abstract class AbstractEJB3Test extends Arquillian {
}
protected void assertEquals(String msg, int expected, int actual) {
- AssertJUnit.assertEquals(expected, actual);
+ AssertJUnit.assertEquals(msg, expected, actual);
}
protected void assertEquals(String msg, String expected, String actual) {
- AssertJUnit.assertEquals(expected, actual);
+ AssertJUnit.assertEquals(msg, expected, actual);
}
protected void fail(String message) {
diff --git a/modules/enterprise/server/itests/pom.xml
b/modules/enterprise/server/itests/pom.xml
index d17fa7d..68425c80b 100644
--- a/modules/enterprise/server/itests/pom.xml
+++ b/modules/enterprise/server/itests/pom.xml
@@ -33,6 +33,57 @@
need the embeddable-ejb3 jar above the standard ejb3 jars because we need the
embeddble packages
loaded when testing. -->
+ <dependency>
+ <groupId>org.jboss.spec</groupId>
+ <artifactId>jboss-javaee-6.0</artifactId>
+ <version>${jboss.javaee6.spec.version}</version>
+ <scope>provided</scope>
+ <type>pom</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.as</groupId>
+ <artifactId>jboss-as-arquillian-container-managed</artifactId>
+ <version>${jboss.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.arquillian.testng</groupId>
+ <artifactId>arquillian-testng-container</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.shrinkwrap</groupId>
+ <artifactId>shrinkwrap-impl-base</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.shrinkwrap.resolver</groupId>
+ <artifactId>shrinkwrap-resolver-api</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.shrinkwrap.resolver</groupId>
+ <artifactId>shrinkwrap-resolver-api-maven</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.shrinkwrap.resolver</groupId>
+ <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.arquillian.protocol</groupId>
+ <artifactId>arquillian-protocol-servlet</artifactId>
+ <scope>test</scope>
+ </dependency>
+
<dependency>
<groupId>org.rhq</groupId>
<artifactId>test-utils</artifactId>
diff --git
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/alert/AlertDefinitionWithComplexNotificationsTest.java
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/alert/AlertDefinitionWithComplexNotificationsTest.java
index d89855e..9ab2cf9 100644
---
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/alert/AlertDefinitionWithComplexNotificationsTest.java
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/alert/AlertDefinitionWithComplexNotificationsTest.java
@@ -27,7 +27,6 @@ import java.util.List;
import java.util.Set;
import javax.persistence.EntityManager;
-import javax.transaction.TransactionManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -67,11 +66,9 @@ import org.rhq.enterprise.server.TestServerPluginService;
import org.rhq.enterprise.server.auth.SessionManager;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.test.TestServerCommunicationsService;
+import org.rhq.enterprise.server.test.TransactionCallback;
import org.rhq.enterprise.server.util.LookupUtil;
import org.rhq.enterprise.server.util.ResourceTreeHelper;
-import org.rhq.test.JPAUtils;
-import org.rhq.test.TransactionCallback;
-import org.rhq.test.TransactionCallbackWithContext;
/**
*
@@ -569,9 +566,9 @@ public class AlertDefinitionWithComplexNotificationsTest extends
AbstractEJB3Tes
private void removeNoExceptions(final Object o) {
try {
- JPAUtils.executeInTransaction(new
TransactionCallbackWithContext<Void>() {
- @Override
- public Void execute(TransactionManager tm, EntityManager em) {
+ executeInTransaction(new TransactionCallback() {
+ public void execute() {
+ EntityManager em = getEntityManager();
Object o2 = em.merge(o);
if (o2 instanceof Resource) {
@@ -579,7 +576,6 @@ public class AlertDefinitionWithComplexNotificationsTest extends
AbstractEJB3Tes
} else {
em.remove(o2);
}
- return null;
}
});
} catch (Exception e) {
diff --git
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/AbstractDriftServerTest.java
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/AbstractDriftServerTest.java
index bc8cf51..4f43c5d 100644
---
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/AbstractDriftServerTest.java
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/AbstractDriftServerTest.java
@@ -48,7 +48,7 @@ import org.rhq.enterprise.server.plugin.ServerPluginsLocal;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.test.TestServerCommunicationsService;
import org.rhq.enterprise.server.util.ResourceTreeHelper;
-import org.rhq.test.TransactionCallback;
+import org.rhq.enterprise.server.test.TransactionCallback;
@Test(groups = "drift", sequential = true)
public abstract class AbstractDriftServerTest extends AbstractEJB3Test {
diff --git
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
index 81601f3..bbd93b1 100644
---
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
@@ -63,7 +63,7 @@ import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.safeinvoker.HibernateDetachUtility;
import org.rhq.test.AssertUtils;
-import org.rhq.test.TransactionCallback;
+import org.rhq.enterprise.server.test.TransactionCallback;
public class DriftTemplateManagerBeanTest extends AbstractDriftServerTest {
diff --git
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
index e117707..dee42d9 100644
---
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
@@ -53,7 +53,7 @@ import org.rhq.core.domain.drift.dto.DriftDTO;
import org.rhq.core.domain.drift.dto.DriftFileDTO;
import org.rhq.core.domain.util.PageList;
import org.rhq.test.AssertUtils;
-import org.rhq.test.TransactionCallback;
+import org.rhq.enterprise.server.test.TransactionCallback;
@Test(dependsOnGroups = "pinning")
public class JPADriftServerBeanTest extends AbstractDriftServerTest {
diff --git
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
index 11b4a68..564264a 100644
---
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
@@ -29,7 +29,7 @@ import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.safeinvoker.HibernateDetachUtility;
import org.rhq.test.AssertUtils;
-import org.rhq.test.TransactionCallback;
+import org.rhq.enterprise.server.test.TransactionCallback;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
diff --git
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
index bb132fe..a214621 100644
---
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
@@ -55,7 +55,7 @@ import org.rhq.core.domain.drift.JPADriftSet;
import org.rhq.core.domain.server.EntitySerializer;
import org.rhq.core.domain.util.PageList;
import org.rhq.test.AssertUtils;
-import org.rhq.test.TransactionCallback;
+import org.rhq.enterprise.server.test.TransactionCallback;
@Test(dependsOnGroups = "pinning")
public class ManageSnapshotsTest extends AbstractDriftServerTest {
diff --git a/modules/enterprise/server/jar/pom.xml
b/modules/enterprise/server/jar/pom.xml
index ad383e2..0eaa6d9 100644
--- a/modules/enterprise/server/jar/pom.xml
+++ b/modules/enterprise/server/jar/pom.xml
@@ -107,9 +107,60 @@
<!--================ Test Deps ================-->
<!-- Note, the test deps are intentionally placed above the other scoped deps
because of classpath
- reasons. Maven orders the [test] classpath in the order listed in the pom.
We specifically
- need the embeddable-ejb3 jar above the standard ejb3 jars because we need the
embeddble packages
- loaded when testing. -->
+ reasons. Maven orders the [test] classpath in the order listed in the pom.
-->
+
+ <dependency>
+ <groupId>org.jboss.spec</groupId>
+ <artifactId>jboss-javaee-6.0</artifactId>
+ <version>${jboss.javaee6.spec.version}</version>
+ <scope>provided</scope>
+ <type>pom</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.as</groupId>
+ <artifactId>jboss-as-arquillian-container-managed</artifactId>
+ <version>${jboss.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.arquillian.testng</groupId>
+ <artifactId>arquillian-testng-container</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.shrinkwrap</groupId>
+ <artifactId>shrinkwrap-impl-base</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.shrinkwrap.resolver</groupId>
+ <artifactId>shrinkwrap-resolver-api</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.shrinkwrap.resolver</groupId>
+ <artifactId>shrinkwrap-resolver-api-maven</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.shrinkwrap.resolver</groupId>
+ <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.arquillian.protocol</groupId>
+ <artifactId>arquillian-protocol-servlet</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+
<dependency>
<groupId>org.jboss.as</groupId>
@@ -165,7 +216,6 @@
</dependency>
<!-- NOTE: The remaining test deps correspond to the classes contained in
hibernate-all.jar and thirdparty-all.jar. -->
-
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
index 5116a90..97694e3 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
@@ -66,6 +66,7 @@ import
org.rhq.enterprise.server.measurement.MeasurementDataManagerLocal;
import org.rhq.enterprise.server.resource.metadata.test.UpdatePluginMetadataTestBase;
import org.rhq.enterprise.server.scheduler.SchedulerLocal;
import org.rhq.enterprise.server.scheduler.jobs.AlertAvailabilityDurationJob;
+import org.rhq.enterprise.server.test.TransactionCallbackReturnable;
import org.rhq.enterprise.server.util.LookupUtil;
import org.rhq.test.JPAUtils;
import org.rhq.test.TransactionCallbackWithContext;
@@ -428,9 +429,9 @@ public class AlertConditionTest extends UpdatePluginMetadataTestBase
{
}
private AlertCondition getAlertConditionWithLogs(final int conditionId) {
- return JPAUtils.executeInTransaction(new
TransactionCallbackWithContext<AlertCondition>() {
+ return executeInTransaction(new
TransactionCallbackReturnable<AlertCondition>() {
@Override
- public AlertCondition execute(TransactionManager tm, EntityManager em) throws
Exception {
+ public AlertCondition execute() throws Exception {
AlertCondition cond = em.find(AlertCondition.class, conditionId);
cond.getConditionLogs().size(); // force the load
return cond;
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java
index 5992ea1..a4446c1 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java
@@ -31,7 +31,6 @@ import javax.management.ObjectName;
import javax.persistence.Query;
import org.testng.annotations.AfterGroups;
-import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -165,8 +164,8 @@ public class CoreServerServiceImplTest extends AbstractEJB3Test {
server.setId(serverId);
}
- @AfterMethod
- public void unprepare() throws Exception {
+ @Override
+ public void afterMethod() throws Exception {
// cleanup our test server
LookupUtil.getCloudManager().updateServerMode(new Integer[] { server.getId() },
OperationMode.DOWN);
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/group/test/LdapGroupManagerBeanTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/group/test/LdapGroupManagerBeanTest.java
index 78d23e8..aaa0808 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/group/test/LdapGroupManagerBeanTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/group/test/LdapGroupManagerBeanTest.java
@@ -38,9 +38,9 @@ import org.rhq.enterprise.server.resource.group.LdapGroupManagerLocal;
import org.rhq.enterprise.server.system.SystemManagerLocal;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.test.TestServerPluginService;
+import org.rhq.enterprise.server.test.TransactionCallback;
import org.rhq.enterprise.server.test.ldap.FakeLdapCtxFactory;
import org.rhq.enterprise.server.util.LookupUtil;
-import org.rhq.test.TransactionCallback;
/**
* Integration tests for methods and operations performed by {@link
LdapGroupManagerBean}.
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MetadataBeanTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MetadataBeanTest.java
index 3748612..755f910 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MetadataBeanTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MetadataBeanTest.java
@@ -53,10 +53,6 @@ public class MetadataBeanTest extends AbstractEJB3Test {
private List<Integer> pluginIds = new ArrayList<Integer>();
- @Override
- protected boolean isDBResetNeeded() {
- return false;
- }
@BeforeGroups(groups = { "plugin.metadata" }, dependsOnGroups = {
"integration.ejb3" })
public void beforeGroups() throws Exception {
@@ -79,7 +75,11 @@ public class MetadataBeanTest extends AbstractEJB3Test {
}
@BeforeMethod(groups = { "plugin.metadata" }, dependsOnGroups = {
"integration.ejb3" })
- public void beforeMethod() throws Exception {
+ public void before() throws Exception {
+ if (!inContainer()) {
+ return;
+ }
+
TestBundleServerPluginService bundleService = new
TestBundleServerPluginService();
prepareCustomServerPluginService(bundleService);
bundleService.startMasterPluginContainerWithoutSchedulingJobs();
@@ -93,7 +93,11 @@ public class MetadataBeanTest extends AbstractEJB3Test {
* however removes the generated plugin files during each test run.
*/
@AfterMethod(alwaysRun = true, groups = { "plugin.metadata" })
- void afterMethod() throws Exception {
+ void after() throws Exception {
+ if (!inContainer()) {
+ return;
+ }
+
unprepareServerPluginService();
unprepareScheduler();
unpreparePluginScannerService();
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest.java
index 336e23b..0e142e9 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest.java
@@ -512,7 +512,7 @@ public class ResourceMetadataManagerBeanTest extends MetadataBeanTest
{
// quickly as it is basically just updates the the inventory status to
UNINVENTORIED for the
// resources to be deleted.
for (Resource resource : resources) {
- assertEquals("The resource should have been marked for deletion",
+ assertTrue("The resource should have been marked for deletion",
InventoryStatus.UNINVENTORIED == resource.getInventoryStatus());
}
}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdatePluginMetadataTestBase.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdatePluginMetadataTestBase.java
index a564aca..ef785fc 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdatePluginMetadataTestBase.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdatePluginMetadataTestBase.java
@@ -28,7 +28,6 @@ import java.util.UUID;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.transaction.Status;
-import javax.transaction.TransactionManager;
import javax.xml.XMLConstants;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
@@ -61,9 +60,8 @@ import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
import org.rhq.enterprise.server.resource.metadata.PluginManagerLocal;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.test.TestServerCommunicationsService;
+import org.rhq.enterprise.server.test.TransactionCallbackReturnable;
import org.rhq.enterprise.server.util.LookupUtil;
-import org.rhq.test.JPAUtils;
-import org.rhq.test.TransactionCallbackWithContext;
public class UpdatePluginMetadataTestBase extends AbstractEJB3Test {
@@ -425,9 +423,9 @@ public class UpdatePluginMetadataTestBase extends AbstractEJB3Test {
}
protected Resource persistNewResource(final String resourceTypeName) throws Exception
{
- return JPAUtils.executeInTransaction(new
TransactionCallbackWithContext<Resource>() {
- @Override
- public Resource execute(TransactionManager tm, EntityManager em) throws
Exception {
+ return executeInTransaction(new TransactionCallbackReturnable<Resource>()
{
+
+ public Resource execute() throws Exception {
ResourceType resourceType = getResourceType(resourceTypeName);
Resource resource = new Resource("reskey" +
System.currentTimeMillis(), "resname", resourceType);
resource.setUuid(UUID.randomUUID().toString());
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/scheduler/jobs/DataPurgeJobTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/scheduler/jobs/DataPurgeJobTest.java
index c710706..31d2a87 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/scheduler/jobs/DataPurgeJobTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/scheduler/jobs/DataPurgeJobTest.java
@@ -36,8 +36,6 @@ import javax.transaction.SystemException;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobListener;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.rhq.core.domain.alert.Alert;
@@ -97,8 +95,8 @@ public class DataPurgeJobTest extends AbstractEJB3Test {
private int resourceTypeId;
private TestServerPluginService testServerPluginService;
- @BeforeMethod
- public void beforeMethod() throws Throwable {
+ @Override
+ public void beforeMethod() throws Exception {
try {
//we need this because the drift plugins are referenced from the system
settings that we use in our tests
testServerPluginService = new TestServerPluginService();
@@ -111,12 +109,12 @@ public class DataPurgeJobTest extends AbstractEJB3Test {
} catch (Throwable t) {
System.err.println("Cannot prepare test: " + t);
t.printStackTrace();
- throw t;
+ throw new RuntimeException(t);
}
}
- @AfterMethod(alwaysRun = true)
- public void afterMethod() throws Throwable {
+ @Override
+ public void afterMethod() throws Exception {
try {
deleteNewResource(newResource);
unprepareForTestAgents();
@@ -125,7 +123,7 @@ public class DataPurgeJobTest extends AbstractEJB3Test {
} catch (Throwable t) {
System.err.println("Cannot unprepare test: " + t);
t.printStackTrace();
- throw t;
+ throw new RuntimeException(t);
}
}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
index 11d01a2..4ae4692 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
@@ -1,321 +1,482 @@
-/*
- * 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 as published by
- * the Free Software Foundation version 2 of the License.
- *
- * 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 for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
package org.rhq.enterprise.server.test;
-import static org.rhq.test.JPAUtils.clearDB;
-import static org.rhq.test.JPAUtils.lookupEntityManager;
-import static org.rhq.test.JPAUtils.lookupTransactionManager;
-
+import java.io.File;
import java.sql.Connection;
import java.sql.SQLException;
-import java.util.Hashtable;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
import java.util.Properties;
+import java.util.regex.Pattern;
import javax.management.MBeanServer;
-import javax.management.MBeanServerFactory;
+import javax.naming.Context;
import javax.naming.InitialContext;
-import javax.naming.NamingException;
import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceContext;
import javax.transaction.TransactionManager;
-import org.hibernate.SessionFactory;
-import org.hibernate.stat.Statistics;
import org.testng.AssertJUnit;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.AfterSuite;
-import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.BeforeSuite;
-import org.jboss.ejb3.embedded.EJB3StandaloneBootstrap;
-import org.jboss.ejb3.embedded.EJB3StandaloneDeployer;
-import org.jboss.mx.util.MBeanServerLocator;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.test.api.ArquillianResource;
+import org.jboss.arquillian.testng.Arquillian;
+import org.jboss.shrinkwrap.api.ArchivePaths;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.jboss.shrinkwrap.resolver.api.DependencyResolvers;
+import org.jboss.shrinkwrap.resolver.api.maven.MavenDependencyResolver;
-import org.rhq.core.db.DatabaseTypeFactory;
-import org.rhq.core.db.PostgresqlDatabaseType;
import org.rhq.core.domain.auth.Subject;
-import org.rhq.core.domain.server.PersistenceUtility;
-import org.rhq.enterprise.server.RHQConstants;
+import org.rhq.core.util.MessageDigestGenerator;
+import org.rhq.core.util.exception.ThrowableUtil;
+import org.rhq.core.util.stream.StreamUtil;
import org.rhq.enterprise.server.auth.SessionManager;
-import org.rhq.enterprise.server.content.ContentSourceManagerBean;
-import org.rhq.enterprise.server.core.comm.ServerCommunicationsServiceMBean;
import org.rhq.enterprise.server.core.plugin.PluginDeploymentScanner;
import org.rhq.enterprise.server.core.plugin.PluginDeploymentScannerMBean;
import org.rhq.enterprise.server.plugin.pc.ServerPluginService;
-import org.rhq.enterprise.server.plugin.pc.ServerPluginServiceMBean;
import org.rhq.enterprise.server.scheduler.SchedulerService;
-import org.rhq.enterprise.server.scheduler.SchedulerServiceMBean;
import org.rhq.enterprise.server.util.LookupUtil;
-import org.rhq.test.JPAUtils;
-import org.rhq.test.TransactionCallback;
-
-/**
- * This is the abstract test base for server jar tests.
- *
- * @author Greg Hinkle
- */
-public abstract class AbstractEJB3Test extends AssertJUnit {
-
- private static EJB3StandaloneDeployer deployer;
- private static Statistics stats;
- @SuppressWarnings("unused")
- private static long start; // see endTest() if you want to output this
- private SchedulerService schedulerService;
- private ServerPluginService serverPluginService;
- private MBeanServer dummyJBossMBeanServer;
- private PluginDeploymentScannerMBean pluginScannerService;
+import org.rhq.test.AssertUtils;
+import org.rhq.test.MatchResult;
+import org.rhq.test.PropertyMatchException;
+import org.rhq.test.PropertyMatcher;
- @BeforeClass
- public void resetDB() throws Exception {
- if (isDBResetNeeded()) {
- clearDB();
- }
- }
+public abstract class AbstractEJB3Test extends Arquillian {
- protected boolean isDBResetNeeded() {
- return true;
- }
+ protected static final String JNDI_RHQDS = "java:jboss/datasources/RHQDS";
- //@BeforeSuite(groups = {"integration.ejb3","PERF"}) // TODO
investigate again
- @BeforeSuite(alwaysRun = true)
- public static void startupEmbeddedJboss() throws Exception {
- // The embeddedDeployment property needs to be set for running tests
- // with the embedded container. It is set in the surefire configuration
- // in pom.xml but setting here makes it easier to run tests directly
- // from your IDE.
- //
- // jsanda
- System.setProperty("embeddedDeployment", "true");
+ private SchedulerService schedulerService;
+ private ServerPluginService serverPluginService;
+ //private MBeanServer dummyJBossMBeanServer;
+ private PluginDeploymentScannerMBean pluginScannerService;
- // Setting content location to the tmp dir
- System.setProperty(ContentSourceManagerBean.FILESYSTEM_PROPERTY,
System.getProperty("java.io.tmpdir"));
+ @PersistenceContext
+ protected EntityManager em;
- System.out.println("Starting JBoss EJB3 Embedded Container...");
- String deployDir = System.getProperty("deploymentDirectory",
"target/classes");
- System.out.println("Loading EJB3 deployments from directory: " +
deployDir);
- try {
- EJB3StandaloneBootstrap.boot(null);
- // EJB3StandaloneBootstrap.scanClasspath();
+ @ArquillianResource
+ protected InitialContext initialContext;
- System.err.println("...... embedded container booted....");
+ // We originally deployed the domain jar as a JavaArchive (JAR file). But this ran
into problems because
+ // of the dependent 3rd party jars. There isn't an obvious way to deploy the
dependent jars of a jar.
+ // Also, AS7 makes it hard to put them in a globally accessibly /lib directory due
to
+ // its classloader isolation and module approach. So, we now deploy an
EnterpriseArchive (ear)
+ // where the domain jar is deployed as a module and the 3rd party libraries are put
in the ear's /lib.
- deployer = EJB3StandaloneBootstrap.createDeployer();
+ @Deployment
+ protected static EnterpriseArchive getBaseDeployment() {
- deployer.setClassLoader(AbstractEJB3Test.class.getClassLoader());
- System.err.println("...... embedded container classloader
set....");
+ // depending on the db in use, set up the necessary datasource
+ String dialect = System.getProperty("hibernate.dialect");
+ if (dialect == null) {
+ System.out.println("!!! hibernate.dialect is not set! Assuming you want
to test on postgres");
+ dialect = "postgres";
+ }
- deployer.getArchivesByResource().add("META-INF/persistence.xml");
- System.err.println("...... embedded container persistence xml
deployed....");
+ String dataSourceXml;
+ if (dialect.toLowerCase().contains("postgres")) {
+ dataSourceXml = "jbossas-postgres-ds.xml";
+ } else {
+ dataSourceXml = "jbossas-oracle-ds.xml";
+ }
- deployer.getArchivesByResource().add("META-INF/ejb-jar.xml");
- System.err.println("...... embedded container ejb-jar xml
deployed....");
+ // Create the domain jar which will subsequently be packaged in the ear
deployment
+ JavaArchive ejbJar = ShrinkWrap.create(JavaArchive.class,
"rhq-core-domain-ejb3.jar") //
+ .addAsManifestResource(dataSourceXml) // the datasource
+ .addAsManifestResource("ejb-jar.xml") // the empty ejb jar
descriptor
+ .addAsManifestResource("test-persistence.xml",
"persistence.xml") // the test persistence context
+ .addAsManifestResource(EmptyAsset.INSTANCE,
ArchivePaths.create("beans.xml") // add CDI injection (needed by arquillian
injection)
+ );
+
+ // non-domain RHQ classes in use by domain test classes
+ ejbJar.addClass(ThrowableUtil.class) //
+ .addClass(MessageDigestGenerator.class) //
+ .addClass(StreamUtil.class) //
+ .addClass(AssertUtils.class) //
+ .addClasses(PropertyMatcher.class, MatchResult.class,
PropertyMatchException.class);
+
+ // domain classes
+ ejbJar = addClasses(ejbJar, new File("target/classes/org"), null);
+
+ JavaArchive testClassesJar = ShrinkWrap.create(JavaArchive.class,
"test-classes.jar");
+ testClassesJar = addClasses(testClassesJar, new
File("target/test-classes/org"), null);
+
+ // create test ear
+ EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class,
"test-domain.ear") //
+ .addAsModule(ejbJar) // the domain jar under test
+ .addAsLibrary(testClassesJar) // the actual test classes
+ .setApplicationXML("application.xml"); // the application xml
declaring the ejb jar
+
+ // Adding the 3rd party jars is not easy. There were basically two approaches I
could think of:
+ //
+ // 1) Use the MavenDependencyResolver to figure out and add all of the test deps
and put them in lib
+ //
+ // This immediately ran into trouble as there were way more jars sucked in than
were actually necessary.
+ // Furthermore, it included arquillian, shrinkwrap, jboss, etc.. lots of jars
that actually caused
+ // issues like locking and other horrible things due, I suppose, to just stepping
all over the test env
+ // set up by Arquillian. So, the next step was to try and start excluding the
unwanted jars. This was
+ // tedious and difficult and I didn't really get it close to working before
giving up and going with
+ // option 2.
+ //
+ // 2) Use the MavenDependencyResolver to locate and pull just the artifacts we
need.
+ //
+ // This is annoying because it's basically duplicating the same sort of
effort that we already
+ // use maven to do for us. It involves running, failing on NoClassDefFound,
fixing it, repeat. It
+ // does pull in necessary transitive deps but sometimes it pulls in unwanted
transitive deps. So,
+ // we still end up having to do some exclusion filtering. Since Shrinkwrap has
weak and buggy
+ // filtering, we have some homegrown filtering methods below.
+ // TODO: Is there any way to not have to specify the versions for the transitive
deps? This is brittle as is.
+
+ //load 3rd party deps explicitly
+ MavenDependencyResolver resolver =
DependencyResolvers.use(MavenDependencyResolver.class);
+ resolver.loadMetadataFromPom("pom.xml");
+ Collection<JavaArchive> dependencies = new HashSet<JavaArchive>();
+ dependencies
+
.addAll(resolver.artifact("commons-beanutils:commons-beanutils:1.8.2").resolveAs(JavaArchive.class));
+
dependencies.addAll(resolver.artifact("commons-codec:commons-codec").resolveAs(JavaArchive.class));
+
dependencies.addAll(resolver.artifact("commons-io:commons-io").resolveAs(JavaArchive.class));
+
dependencies.addAll(resolver.artifact("org.unitils:unitils-testng:3.1").resolveAs(JavaArchive.class));
+
+ String[] excludeFilters = { "testng.*jdk" };
+
+ dependencies = exclude(dependencies, excludeFilters);
+ ear = ear.addAsLibraries(dependencies);
+
+ System.out.println("** The Deployment EAR: " + ear.toString(true) +
"\n");
+
+ return ear;
+ }
- EJB3StandaloneBootstrap.deployXmlResource("jboss-jms-beans.xml");
- System.err.println("...... embedded container jboss-jms-beans xml
deployed....");
+ /**
+ * @param dependencies The current set of deps - THIS IS FILTERED, not copied
+ * @param filters regex filters
+ * @return the filtered set of deps
+ */
+ public static Collection<JavaArchive> exclude(Collection<JavaArchive>
dependencies, String... filters) {
- EJB3StandaloneBootstrap.deployXmlResource("rhq-mdb-beans.xml");
- System.err.println("...... embedded container rhq-mdb-beans xml
deployed....");
+ for (String filter : filters) {
+ Pattern p = Pattern.compile(filter);
- /*
- * File core = new File(deployDir, "on-core-domain-ejb.ejb3");
if (!core.exists())
- * System.err.println("Deployment directory does not exist: " +
core.getAbsolutePath());
- * deployer.getArchives().add(core.toURI().toURL());
- *
- * File server = new File(deployDir,
"on-enterprise-server-ejb.ejb3"); if (!server.exists())
- * System.err.println("Deployment directory does not exist: " +
server.getAbsolutePath());
- * deployer.getArchives().add(server.toURI().toURL());
- *
- */
+ for (Iterator<JavaArchive> i = dependencies.iterator(); i.hasNext();)
{
+ JavaArchive dependency = i.next();
+ if (p.matcher(dependency.getName()).find()) {
+ i.remove();
+ }
+ }
+ }
- //deployer.setKernel(EJB3StandaloneBootstrap.getKernel());
- deployer.create();
- System.err.println("...... deployer created....");
+ return dependencies;
+ }
- deployer.start();
- System.err.println("...... deployer started....");
+ /**
+ * @param dependencies The current set of deps - this is not changed
+ * @param filters regex filters
+ * @return set set of JavaArchives in dependencies that matched an include filter
+ */
+ public static Collection<JavaArchive> include(Collection<JavaArchive>
dependencies, String... filters) {
- System.err.println("...... start statistics");
- SessionFactory sessionFactory =
PersistenceUtility.getHibernateSession(getEntityManager())
- .getSessionFactory();
- stats = sessionFactory.getStatistics();
- stats.setStatisticsEnabled(true);
+ Collection<JavaArchive> result = new HashSet<JavaArchive>();
- System.err.println("...... embedded container initialized and ready for
testing....");
+ for (String filter : filters) {
+ Pattern p = Pattern.compile(filter);
- } catch (Throwable t) {
- // Catch RuntimeExceptions and Errors and dump their stack trace, because
Surefire will completely swallow them
- // and throw a cryptic NPE (see
http://jira.codehaus.org/browse/SUREFIRE-157)!
- t.printStackTrace();
- throw new RuntimeException(t);
+ for (Iterator<JavaArchive> i = dependencies.iterator(); i.hasNext();)
{
+ JavaArchive dependency = i.next();
+ if (p.matcher(dependency.getName()).find()) {
+ result.add(dependency);
+ }
+ }
}
- }
- //@Configuration(groups = "integration.ejb3", afterSuite = true)
- @AfterSuite(alwaysRun = true)
- public static void shutdownEmbeddedJboss() {
- System.out.println("Stopping JBoss EJB3 Embedded Container...");
+ return result;
+ }
- System.err.println("!!! Any errors occurring after this point
!!!");
- System.err.println("!!! occurred during embedded server shutdown
!!!");
- System.err.println("!!! and are probably not a real problem.
!!!");
- if (deployer != null) {
- try {
- deployer.stop();
- deployer.destroy();
- deployer = null;
- } catch (Throwable t) {
- System.err.println("Failed to stop embedded deployer");
- t.printStackTrace(System.err);
+ public static JavaArchive addClasses(JavaArchive archive, File dir, String
packageName) {
+
+ packageName = (null == packageName) ? "" + dir.getName() : packageName
+ "." + dir.getName();
+
+ for (File file : dir.listFiles()) {
+ String fileName = file.getName();
+ if (file.isDirectory()) {
+ archive = addClasses(archive, file, packageName);
+ } else if (fileName.endsWith(".class")) {
+ int dot = fileName.indexOf('.');
+ try {
+ Class<?> clazz = Class.forName(packageName + "." +
fileName.substring(0, dot));
+ archive.addClasses(clazz);
+ } catch (Exception e) {
+ System.out.println("WARN: Could not add class:" + e);
+ }
}
}
- EJB3StandaloneBootstrap.shutdown();
+
+ return archive;
}
+ /**
+ * <p>DO NOT OVERRIDE.</p>
+ * <p>DO NOT DEFINE AN @BeforeMethod</p>
+ *
+ * Instead, override {@link #beforeMethod()}. If you must override, for example, if
you
+ * need to use special attributes on your annotation, then ensure you protect the
code with
+ * and {@link #inContainer()} call.
+ */
@BeforeMethod
- public static void startTest() {
- if (DatabaseTypeFactory.getDefaultDatabaseType() == null) {
- try {
- Connection conn = getConnection();
-
DatabaseTypeFactory.setDefaultDatabaseType(DatabaseTypeFactory.getDatabaseType(conn));
- } catch (Exception e) {
- System.err.println("!!! WARNING !!! cannot set default database
type, some tests may fail");
- e.printStackTrace();
- }
+ protected void __beforeMethod() throws Exception {
+ // Note that Arquillian calls the testng BeforeMethod twice (as of 1.0.2.Final,
once
+ // out of container and once in container. In general the expectation is to
execute it
+ // one time, and doing it in container allows for the expected injections and
context.
+ if (inContainer()) {
+ beforeMethod();
}
-
- if (stats != null)
- start = stats.getQueryExecutionCount();
- else
- start = 0;
}
- public static Connection getConnection() throws SQLException {
- return LookupUtil.getDataSource().getConnection();
+ /**
+ * <p>DO NOT OVERRIDE.</p>
+ * <p>DO NOT DEFINE AN @AfterMethod</p>
+ *
+ * Instead, override {@link #afterMethod()}.
+ */
+ @BeforeMethod
+ protected void __afterMethod() throws Exception {
+ // currently no special handling necessary
+ afterMethod();
}
- @AfterMethod
- public static void endTest() {
- //System.out.println("Connections used: " +
(stats.getQueryExecutionCount() - start));
+ protected boolean inContainer() {
+ // If the injection is done we're running in the container.
+ return (null != initialContext);
}
- public TransactionManager getTransactionManager() {
- return lookupTransactionManager();
+ /**
+ * Override Point! Do not implement a @BeforeMethod, instead override this method.
+ */
+ protected void beforeMethod() throws Exception {
+ // do nothing if we're not overridden
}
- public static EntityManager getEntityManager() {
- return lookupEntityManager();
+ /**
+ * Override Point! Do not implement an @AfterMethod, instead override this method.
+ */
+ protected void afterMethod() throws Exception {
+ // do nothing if we're not overridden
}
- public static InitialContext getInitialContext() {
- Hashtable<String, String> env = new Hashtable<String, String>();
- env.put("java.naming.factory.initial",
"org.jnp.interfaces.LocalOnlyContextFactory");
- env.put("java.naming.factory.url.pkgs",
"org.jboss.naming:org.jnp.interfaces");
- try {
- return new InitialContext(env);
- } catch (NamingException e) {
- e.printStackTrace();
- throw new RuntimeException("Failed to load initial context", e);
- }
+ protected void startTransaction() throws Exception {
+ getTransactionManager().begin();
}
- public boolean isPostgres() throws Exception {
- return DatabaseTypeFactory.getDatabaseType(getInitialContext(),
RHQConstants.DATASOURCE_JNDI_NAME) instanceof PostgresqlDatabaseType;
+ protected void commitTransaction() throws Exception {
+ getTransactionManager().commit();
}
- /**
- * This creates a session for the given user and associates that session with the
subject. You can test the security
- * annotations by creating sessions for different users with different permissions.
- *
- * @param subject a JON subject
- * @return the session activated subject, a copy of the subject passed in.
- */
- public Subject createSession(Subject subject) {
- return SessionManager.getInstance().put(subject);
+ protected void rollbackTransaction() throws Exception {
+ getTransactionManager().rollback();
}
- /**
- * Returns an MBeanServer that simulates the JBossAS MBeanServer.
- *
- * @return MBeanServer instance
- */
- public MBeanServer getJBossMBeanServer() {
- if (dummyJBossMBeanServer == null) {
- dummyJBossMBeanServer =
MBeanServerFactory.createMBeanServer("jboss");
- MBeanServerLocator.setJBoss(dummyJBossMBeanServer);
+ protected InitialContext getInitialContext() {
+ // may be null if not yet injected (as of 1.0.1.Final, only injected inside
@Test)
+ if (null != initialContext) {
+ return initialContext;
}
- return dummyJBossMBeanServer;
- }
+ InitialContext result = null;
- public void releaseJBossMBeanServer() {
- if (dummyJBossMBeanServer != null) {
- MBeanServerFactory.releaseMBeanServer(dummyJBossMBeanServer);
- dummyJBossMBeanServer = null;
+ try {
+ Properties jndiProperties = new Properties();
+ jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jboss.as.naming.InitialContextFactory");
+ result = new InitialContext(jndiProperties);
+
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to get InitialContext", e);
}
+
+ return result;
}
- /**
- * If you need to test round trips from server to agent and back, you first must
install the server communications
- * service that houses all the agent clients. Call this method and add your test
agent services to the public fields
- * in the returned object.
- *
- * @return the object that will house your test agent service impls and the agent
clients.
- *
- * @throws RuntimeException
- */
- public TestServerCommunicationsService prepareForTestAgents() {
+ public TransactionManager getTransactionManager() {
+ TransactionManager result = null;
+
try {
- MBeanServer mbs = getJBossMBeanServer();
- if (mbs.isRegistered(ServerCommunicationsServiceMBean.OBJECT_NAME)) {
- mbs.unregisterMBean(ServerCommunicationsServiceMBean.OBJECT_NAME);
+ result = (TransactionManager)
getInitialContext().lookup("java:jboss/TransactionManager");
+ if (null == result) {
+ result = (TransactionManager)
getInitialContext().lookup("TransactionManager");
}
- TestServerCommunicationsService testAgentContainer = new
TestServerCommunicationsService();
- mbs.registerMBean(testAgentContainer,
ServerCommunicationsServiceMBean.OBJECT_NAME);
- return testAgentContainer;
+
} catch (Exception e) {
- throw new RuntimeException(e);
+ throw new RuntimeException("Failed to get TransactionManager", e);
+ }
+
+ return result;
+ }
+
+ protected EntityManager getEntityManager() {
+ // may be null if not yet injected (as of 1.0.1.Final, only injected inside
@Test)
+ if (null != em) {
+ return em;
+ }
+
+ EntityManager result = null;
+
+ try {
+ EntityManagerFactory emf = (EntityManagerFactory)
getInitialContext().lookup(
+ "java:jboss/RHQEntityManagerFactory");
+ result = emf.createEntityManager();
+
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to get EntityManagerFactory",
e);
}
+
+ return result;
}
/**
- * Call this after your tests have finished. You only need to call this if your test
previously called
- * {@link #prepareForTestAgents()}.
+ * Equivalent to <pre>executeInTransaction(true, callback)</pre>.
+ * @param callback
*/
- public void unprepareForTestAgents() {
- unprepareForTestAgents(false);
+ protected void executeInTransaction(TransactionCallback callback) {
+ executeInTransaction(true, callback);
}
- public void unprepareForTestAgents(boolean beanOnly) {
+ protected void executeInTransaction(boolean rollback, final TransactionCallback
callback) {
+ executeInTransaction(rollback, new TransactionCallbackReturnable<Void>() {
+
+ public Void execute() throws Exception {
+ callback.execute();
+ return null;
+ }});
+ }
+
+ protected <T> T executeInTransaction(TransactionCallbackReturnable<T>
callback) {
+ return executeInTransaction(true, callback);
+ }
+
+ protected <T> T executeInTransaction(boolean rollback,
TransactionCallbackReturnable<T> callback) {
try {
- if (beanOnly) {
- MBeanServer mbs = getJBossMBeanServer();
- if (mbs.isRegistered(ServerCommunicationsServiceMBean.OBJECT_NAME)) {
- mbs.unregisterMBean(ServerCommunicationsServiceMBean.OBJECT_NAME);
+ startTransaction();
+ T result = callback.execute();
+ return result;
+
+ } catch (Throwable t) {
+ rollback = true;
+ RuntimeException re = new RuntimeException(ThrowableUtil.getAllMessages(t),
t);
+ throw re;
+
+ } finally {
+ try {
+ if (!rollback) {
+ commitTransaction();
+ } else {
+ rollbackTransaction();
}
- } else {
- releaseJBossMBeanServer();
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to " + (rollback ?
"rollback" : "commit") + " transaction", e);
}
- } catch (Exception e) {
- throw new RuntimeException(e);
}
}
+
+ /* The old AbstractEJB3Test impl extended AssertJUnit. Continue to support the used
methods
+ * with various call-thru methods.
+ */
+
+ protected void assertNotNull(Object o) {
+ AssertJUnit.assertNotNull(o);
+ }
+
+ protected void assertNotNull(String msg, Object o) {
+ AssertJUnit.assertNotNull(msg, o);
+ }
+
+ protected void assertNull(Object o) {
+ AssertJUnit.assertNull(o);
+ }
+
+ protected void assertNull(String msg, Object o) {
+ AssertJUnit.assertNull(msg, o);
+ }
+
+ protected void assertFalse(boolean b) {
+ AssertJUnit.assertFalse(b);
+ }
+
+ protected void assertFalse(String msg, boolean b) {
+ AssertJUnit.assertFalse(msg, b);
+ }
+
+ protected void assertTrue(boolean b) {
+ AssertJUnit.assertTrue(b);
+ }
+
+ protected void assertTrue(String msg, boolean b) {
+ AssertJUnit.assertTrue(msg, b);
+ }
+
+ protected void assertEquals(int expected, int actual) {
+ AssertJUnit.assertEquals(expected, actual);
+ }
+
+ protected void assertEquals(String msg, int expected, int actual) {
+ AssertJUnit.assertEquals(msg, expected, actual);
+ }
+
+ protected void assertEquals(long expected, long actual) {
+ AssertJUnit.assertEquals(expected, actual);
+ }
+
+ protected void assertEquals(String msg, long expected, long actual) {
+ AssertJUnit.assertEquals(msg, expected, actual);
+ }
+
+ protected void assertEquals(String expected, String actual) {
+ AssertJUnit.assertEquals(expected, actual);
+ }
+
+ protected void assertEquals(String msg, String expected, String actual) {
+ AssertJUnit.assertEquals(msg, expected, actual);
+ }
+
+ protected void assertEquals(boolean expected, boolean actual) {
+ AssertJUnit.assertEquals(expected, actual);
+ }
+
+ protected void assertEquals(String msg, boolean expected, boolean actual) {
+ AssertJUnit.assertEquals(msg, expected, actual);
+ }
+
+ protected void assertEquals(Object expected, Object actual) {
+ AssertJUnit.assertEquals(expected, actual);
+ }
+
+ protected void assertEquals(String msg, Object expected, Object actual) {
+ AssertJUnit.assertEquals(msg, expected, actual);
+ }
+
+ protected void fail() {
+ AssertJUnit.fail();
+ }
+
+ protected void fail(String message) {
+ AssertJUnit.fail(message);
+ }
+
+ private final long DEFAULT_OFFSET = 50;
+ private long referenceTime = new Date().getTime();
+
+ public Date getAnotherDate() {
+ return getAnotherDate(DEFAULT_OFFSET);
+ }
+
+ public Date getAnotherDate(long offset) {
+ referenceTime += offset;
+ return new Date(referenceTime);
+ }
+
/**
* If you need to test server plugins, you must first prepare the server plugin
service.
* After this returns, the caller must explicitly start the PC by using the
appropriate API
@@ -327,10 +488,11 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
*/
public void prepareCustomServerPluginService(ServerPluginService testServiceMBean) {
try {
- MBeanServer mbs = getJBossMBeanServer();
- testServiceMBean.start();
- mbs.registerMBean(testServiceMBean, ServerPluginServiceMBean.OBJECT_NAME);
- serverPluginService = testServiceMBean;
+ // TODO: Fix
+ // MBeanServer mbs = getJBossMBeanServer();
+ // testServiceMBean.start();
+ // mbs.registerMBean(testServiceMBean,
ServerPluginServiceMBean.OBJECT_NAME);
+ // serverPluginService = testServiceMBean;
return;
} catch (Exception e) {
throw new RuntimeException(e);
@@ -346,16 +508,16 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
serverPluginService.stopMasterPluginContainer();
serverPluginService.stop();
if (beanOnly) {
- MBeanServer mbs = getJBossMBeanServer();
- if (mbs.isRegistered(ServerPluginService.OBJECT_NAME)) {
-
getJBossMBeanServer().unregisterMBean(ServerPluginService.OBJECT_NAME);
- }
- if (mbs.isRegistered(ServerPluginServiceMBean.OBJECT_NAME)) {
-
getJBossMBeanServer().unregisterMBean(ServerPluginServiceMBean.OBJECT_NAME);
- }
+ // TODO: Fix
+ // if (mbs.isRegistered(ServerPluginService.OBJECT_NAME))
{
+ //
getJBossMBeanServer().unregisterMBean(ServerPluginService.OBJECT_NAME);
+ // }
+ // if
(mbs.isRegistered(ServerPluginServiceMBean.OBJECT_NAME)) {
+ //
getJBossMBeanServer().unregisterMBean(ServerPluginServiceMBean.OBJECT_NAME);
+ // }
} else {
- releaseJBossMBeanServer();
+ // releaseJBossMBeanServer();
}
serverPluginService = null;
}
@@ -377,7 +539,7 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
schedulerService = new SchedulerService();
schedulerService.setQuartzProperties(quartzProps);
schedulerService.start();
- getJBossMBeanServer().registerMBean(schedulerService,
SchedulerServiceMBean.SCHEDULER_MBEAN_NAME);
+ // getJBossMBeanServer().registerMBean(schedulerService,
SchedulerServiceMBean.SCHEDULER_MBEAN_NAME);
schedulerService.startQuartzScheduler();
return;
} catch (Exception e) {
@@ -394,12 +556,12 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
if (schedulerService != null) {
schedulerService.stop();
if (beanOnly) {
- MBeanServer mbs = getJBossMBeanServer();
- if (mbs.isRegistered(SchedulerServiceMBean.SCHEDULER_MBEAN_NAME)) {
-
getJBossMBeanServer().unregisterMBean(SchedulerServiceMBean.SCHEDULER_MBEAN_NAME);
- }
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if
(mbs.isRegistered(SchedulerServiceMBean.SCHEDULER_MBEAN_NAME)) {
+ //
getJBossMBeanServer().unregisterMBean(SchedulerServiceMBean.SCHEDULER_MBEAN_NAME);
+ // }
} else {
- releaseJBossMBeanServer();
+ // releaseJBossMBeanServer();
}
schedulerService = null;
@@ -419,9 +581,9 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
if (scannerService == null) {
scannerService = new PluginDeploymentScanner();
}
- MBeanServer mbs = getJBossMBeanServer();
- mbs.registerMBean(scannerService, PluginDeploymentScannerMBean.OBJECT_NAME);
- pluginScannerService = scannerService;
+ // MBeanServer mbs = getJBossMBeanServer();
+ // mbs.registerMBean(scannerService,
PluginDeploymentScannerMBean.OBJECT_NAME);
+ // pluginScannerService = scannerService;
return;
} catch (Exception e) {
e.printStackTrace();
@@ -437,19 +599,86 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
if (pluginScannerService != null) {
pluginScannerService.stop();
if (beanOnly) {
- MBeanServer mbs = getJBossMBeanServer();
- if (mbs.isRegistered(PluginDeploymentScannerMBean.OBJECT_NAME)) {
-
getJBossMBeanServer().unregisterMBean(PluginDeploymentScannerMBean.OBJECT_NAME);
- }
- } else {
- releaseJBossMBeanServer();
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if
(mbs.isRegistered(PluginDeploymentScannerMBean.OBJECT_NAME)) {
+ //
getJBossMBeanServer().unregisterMBean(PluginDeploymentScannerMBean.OBJECT_NAME);
}
+ } else {
+ // releaseJBossMBeanServer();
+ }
- pluginScannerService = null;
+ pluginScannerService = null;
+ }
+
+ /**
+ * If you need to test round trips from server to agent and back, you first must
install the server communications
+ * service that houses all the agent clients. Call this method and add your test
agent services to the public fields
+ * in the returned object.
+ *
+ * @return the object that will house your test agent service impls and the agent
clients.
+ *
+ * @throws RuntimeException
+ */
+ public TestServerCommunicationsService prepareForTestAgents() {
+ try {
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if
(mbs.isRegistered(ServerCommunicationsServiceMBean.OBJECT_NAME)) {
+ //
mbs.unregisterMBean(ServerCommunicationsServiceMBean.OBJECT_NAME);
+ // }
+ TestServerCommunicationsService testAgentContainer = new
TestServerCommunicationsService();
+ // mbs.registerMBean(testAgentContainer,
ServerCommunicationsServiceMBean.OBJECT_NAME);
+ return testAgentContainer;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
}
}
- protected void executeInTransaction(TransactionCallback callback) {
- JPAUtils.executeInTransaction(callback);
+ /**
+ * Call this after your tests have finished. You only need to call this if your test
previously called
+ * {@link #prepareForTestAgents()}.
+ */
+ public void unprepareForTestAgents() {
+ unprepareForTestAgents(false);
+ }
+
+ public void unprepareForTestAgents(boolean beanOnly) {
+ try {
+ if (beanOnly) {
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if
(mbs.isRegistered(ServerCommunicationsServiceMBean.OBJECT_NAME)) {
+ //
mbs.unregisterMBean(ServerCommunicationsServiceMBean.OBJECT_NAME);
+ // }
+ } else {
+ // releaseJBossMBeanServer();
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * This creates a session for the given user and associates that session with the
subject. You can test the security
+ * annotations by creating sessions for different users with different permissions.
+ *
+ * @param subject a JON subject
+ * @return the session activated subject, a copy of the subject passed in.
+ */
+ public Subject createSession(Subject subject) {
+ return SessionManager.getInstance().put(subject);
+ }
+
+ public static Connection getConnection() throws SQLException {
+ return LookupUtil.getDataSource().getConnection();
}
+
+ public MBeanServer getJBossMBeanServer() {
+// if (dummyJBossMBeanServer == null) {
+// dummyJBossMBeanServer =
MBeanServerFactory.createMBeanServer("jboss");
+// MBeanServerLocator.setJBoss(dummyJBossMBeanServer);
+// }
+//
+// return dummyJBossMBeanServer;
+ return null;
+ }
+
}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/LargeGroupTestBase.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/LargeGroupTestBase.java
index 1bf07d7..cb7d301 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/LargeGroupTestBase.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/LargeGroupTestBase.java
@@ -325,8 +325,8 @@ public abstract class LargeGroupTestBase extends AbstractEJB3Test {
System.out.println(" Done.");
// purge the users and role
- JPAUtils.executeInTransaction(new TransactionCallbackWithContext<Object>()
{
- public Object execute(TransactionManager tm, EntityManager em) throws
Exception {
+ executeInTransaction(new TransactionCallbackReturnable<Object>() {
+ public Object execute() throws Exception {
lge.normalRole = em.getReference(Role.class, lge.normalRole.getId());
lge.normalSubject = em.getReference(Subject.class,
lge.normalSubject.getId());
lge.unauthzSubject = em.getReference(Subject.class,
lge.unauthzSubject.getId());
@@ -339,8 +339,8 @@ public abstract class LargeGroupTestBase extends AbstractEJB3Test {
if (!keepTypes) {
// purge the resource types
- JPAUtils.executeInTransaction(new
TransactionCallbackWithContext<Object>() {
- public Object execute(TransactionManager tm, EntityManager em) throws
Exception {
+ executeInTransaction(new TransactionCallbackReturnable<Object>() {
+ public Object execute() throws Exception {
ResourceType pType = em.getReference(ResourceType.class,
lge.platformResource.getResourceType()
.getId());
ResourceType sType = em.getReference(ResourceType.class,
lge.compatibleGroup.getResourceType()
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/OldAbstractEJB3Test.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/OldAbstractEJB3Test.java
new file mode 100644
index 0000000..a8337b7
--- /dev/null
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/OldAbstractEJB3Test.java
@@ -0,0 +1,445 @@
+///*
+// * 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 as published by
+// * the Free Software Foundation version 2 of the License.
+// *
+// * 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 for more details.
+// *
+// * You should have received a copy of the GNU General Public License
+// * along with this program; if not, write to the Free Software
+// * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+// */
+package org.rhq.enterprise.server.test;
+
+import org.testng.AssertJUnit;
+
+
+//import static org.rhq.test.JPAUtils.lookupEntityManager;
+//import static org.rhq.test.JPAUtils.lookupTransactionManager;
+//
+//import java.sql.Connection;
+//import java.sql.SQLException;
+//import java.util.Hashtable;
+//import java.util.Properties;
+//
+//import javax.management.MBeanServer;
+//import javax.management.MBeanServerFactory;
+//import javax.naming.InitialContext;
+//import javax.naming.NamingException;
+//import javax.persistence.EntityManager;
+//import javax.transaction.TransactionManager;
+//
+//import org.hibernate.SessionFactory;
+//import org.hibernate.stat.Statistics;
+//import org.testng.AssertJUnit;
+//import org.testng.annotations.AfterMethod;
+//import org.testng.annotations.AfterSuite;
+//import org.testng.annotations.BeforeMethod;
+//import org.testng.annotations.BeforeSuite;
+//
+//import org.jboss.ejb3.embedded.EJB3StandaloneBootstrap;
+//import org.jboss.ejb3.embedded.EJB3StandaloneDeployer;
+//import org.jboss.mx.util.MBeanServerLocator;
+//
+//import org.rhq.core.db.DatabaseTypeFactory;
+//import org.rhq.core.db.PostgresqlDatabaseType;
+//import org.rhq.core.domain.auth.Subject;
+//import org.rhq.core.domain.server.PersistenceUtility;
+//import org.rhq.enterprise.server.RHQConstants;
+//import org.rhq.enterprise.server.auth.SessionManager;
+//import org.rhq.enterprise.server.content.ContentSourceManagerBean;
+//import org.rhq.enterprise.server.core.comm.ServerCommunicationsServiceMBean;
+//import org.rhq.enterprise.server.core.plugin.PluginDeploymentScanner;
+//import org.rhq.enterprise.server.core.plugin.PluginDeploymentScannerMBean;
+//import org.rhq.enterprise.server.plugin.pc.ServerPluginService;
+//import org.rhq.enterprise.server.plugin.pc.ServerPluginServiceMBean;
+//import org.rhq.enterprise.server.scheduler.SchedulerService;
+//import org.rhq.enterprise.server.scheduler.SchedulerServiceMBean;
+//import org.rhq.enterprise.server.util.LookupUtil;
+//
+////
+/////**
+//// * This is the abstract test base for server jar tests.
+//// *
+//// * @author Greg Hinkle
+//// */
+public abstract class OldAbstractEJB3Test extends AssertJUnit {
+ //
+ // private static EJB3StandaloneDeployer deployer;
+ // private static Statistics stats;
+ // @SuppressWarnings("unused")
+ // private static long start; // see endTest() if you want to output this
+ // private SchedulerService schedulerService;
+ // private ServerPluginService serverPluginService;
+ // private MBeanServer dummyJBossMBeanServer;
+ // private PluginDeploymentScannerMBean pluginScannerService;
+ //
+ //
+ // //@BeforeSuite(groups = {"integration.ejb3","PERF"}) //
TODO investigate again
+ // @BeforeSuite(alwaysRun = true)
+ // public static void startupEmbeddedJboss() throws Exception {
+ // // The embeddedDeployment property needs to be set for running tests
+ // // with the embedded container. It is set in the surefire configuration
+ // // in pom.xml but setting here makes it easier to run tests directly
+ // // from your IDE.
+ // //
+ // // jsanda
+ // System.setProperty("embeddedDeployment", "true");
+ //
+ // // Setting content location to the tmp dir
+ // System.setProperty(ContentSourceManagerBean.FILESYSTEM_PROPERTY,
System.getProperty("java.io.tmpdir"));
+ //
+ // System.out.println("Starting JBoss EJB3 Embedded Container...");
+ // String deployDir = System.getProperty("deploymentDirectory",
"target/classes");
+ // System.out.println("Loading EJB3 deployments from directory: " +
deployDir);
+ // try {
+ // EJB3StandaloneBootstrap.boot(null);
+ // // EJB3StandaloneBootstrap.scanClasspath();
+ //
+ // System.err.println("...... embedded container booted....");
+ //
+ // deployer = EJB3StandaloneBootstrap.createDeployer();
+ //
+ // deployer.setClassLoader(AbstractEJB3Test.class.getClassLoader());
+ // System.err.println("...... embedded container classloader
set....");
+ //
+ //
deployer.getArchivesByResource().add("META-INF/persistence.xml");
+ // System.err.println("...... embedded container persistence xml
deployed....");
+ //
+ //
deployer.getArchivesByResource().add("META-INF/ejb-jar.xml");
+ // System.err.println("...... embedded container ejb-jar xml
deployed....");
+ //
+ //
EJB3StandaloneBootstrap.deployXmlResource("jboss-jms-beans.xml");
+ // System.err.println("...... embedded container jboss-jms-beans xml
deployed....");
+ //
+ //
EJB3StandaloneBootstrap.deployXmlResource("rhq-mdb-beans.xml");
+ // System.err.println("...... embedded container rhq-mdb-beans xml
deployed....");
+ //
+ // /*
+ // * File core = new File(deployDir,
"on-core-domain-ejb.ejb3"); if (!core.exists())
+ // * System.err.println("Deployment directory does not exist: "
+ core.getAbsolutePath());
+ // * deployer.getArchives().add(core.toURI().toURL());
+ // *
+ // * File server = new File(deployDir,
"on-enterprise-server-ejb.ejb3"); if (!server.exists())
+ // * System.err.println("Deployment directory does not exist: "
+ server.getAbsolutePath());
+ // * deployer.getArchives().add(server.toURI().toURL());
+ // *
+ // */
+ //
+ // //deployer.setKernel(EJB3StandaloneBootstrap.getKernel());
+ // deployer.create();
+ // System.err.println("...... deployer created....");
+ //
+ // deployer.start();
+ // System.err.println("...... deployer started....");
+ //
+ // System.err.println("...... start statistics");
+ // SessionFactory sessionFactory =
PersistenceUtility.getHibernateSession(getEntityManager())
+ // .getSessionFactory();
+ // stats = sessionFactory.getStatistics();
+ // stats.setStatisticsEnabled(true);
+ //
+ // System.err.println("...... embedded container initialized and
ready for testing....");
+ //
+ // } catch (Throwable t) {
+ // // Catch RuntimeExceptions and Errors and dump their stack trace,
because Surefire will completely swallow them
+ // // and throw a cryptic NPE (see
http://jira.codehaus.org/browse/SUREFIRE-157)!
+ // t.printStackTrace();
+ // throw new RuntimeException(t);
+ // }
+ // }
+ //
+ // //@Configuration(groups = "integration.ejb3", afterSuite = true)
+ // @AfterSuite(alwaysRun = true)
+ // public static void shutdownEmbeddedJboss() {
+ // System.out.println("Stopping JBoss EJB3 Embedded Container...");
+ //
+ // System.err.println("!!! Any errors occurring after this point
!!!");
+ // System.err.println("!!! occurred during embedded server shutdown
!!!");
+ // System.err.println("!!! and are probably not a real problem.
!!!");
+ // if (deployer != null) {
+ // try {
+ // deployer.stop();
+ // deployer.destroy();
+ // deployer = null;
+ // } catch (Throwable t) {
+ // System.err.println("Failed to stop embedded deployer");
+ // t.printStackTrace(System.err);
+ // }
+ // }
+ // EJB3StandaloneBootstrap.shutdown();
+ // }
+ //
+ // @BeforeMethod
+ // public static void startTest() {
+ // if (DatabaseTypeFactory.getDefaultDatabaseType() == null) {
+ // try {
+ // Connection conn = getConnection();
+ //
DatabaseTypeFactory.setDefaultDatabaseType(DatabaseTypeFactory.getDatabaseType(conn));
+ // } catch (Exception e) {
+ // System.err.println("!!! WARNING !!! cannot set default
database type, some tests may fail");
+ // e.printStackTrace();
+ // }
+ // }
+ //
+ // if (stats != null)
+ // start = stats.getQueryExecutionCount();
+ // else
+ // start = 0;
+ // }
+ //
+ // public static Connection getConnection() throws SQLException {
+ // return LookupUtil.getDataSource().getConnection();
+ // }
+ //
+ // @AfterMethod
+ // public static void endTest() {
+ // //System.out.println("Connections used: " +
(stats.getQueryExecutionCount() - start));
+ // }
+ //
+ // public TransactionManager getTransactionManager() {
+ // return lookupTransactionManager();
+ // }
+ //
+ // public static EntityManager getEntityManager() {
+ // return lookupEntityManager();
+ // }
+ //
+ // public static InitialContext getInitialContext() {
+ // Hashtable<String, String> env = new Hashtable<String,
String>();
+ // env.put("java.naming.factory.initial",
"org.jnp.interfaces.LocalOnlyContextFactory");
+ // env.put("java.naming.factory.url.pkgs",
"org.jboss.naming:org.jnp.interfaces");
+ // try {
+ // return new InitialContext(env);
+ // } catch (NamingException e) {
+ // e.printStackTrace();
+ // throw new RuntimeException("Failed to load initial context",
e);
+ // }
+ // }
+ //
+ // public boolean isPostgres() throws Exception {
+ // return DatabaseTypeFactory.getDatabaseType(getInitialContext(),
RHQConstants.DATASOURCE_JNDI_NAME) instanceof PostgresqlDatabaseType;
+ // }
+ //
+ // /**
+ // * This creates a session for the given user and associates that session with
the subject. You can test the security
+ // * annotations by creating sessions for different users with different
permissions.
+ // *
+ // * @param subject a JON subject
+ // * @return the session activated subject, a copy of the subject passed in.
+ // */
+ // public Subject createSession(Subject subject) {
+ // return SessionManager.getInstance().put(subject);
+ // }
+ //
+ // /**
+ // * Returns an MBeanServer that simulates the JBossAS MBeanServer.
+ // *
+ // * @return MBeanServer instance
+ // */
+ // public MBeanServer getJBossMBeanServer() {
+ // if (dummyJBossMBeanServer == null) {
+ // dummyJBossMBeanServer =
MBeanServerFactory.createMBeanServer("jboss");
+ // MBeanServerLocator.setJBoss(dummyJBossMBeanServer);
+ // }
+ //
+ // return dummyJBossMBeanServer;
+ // }
+ //
+ // public void releaseJBossMBeanServer() {
+ // if (dummyJBossMBeanServer != null) {
+ // MBeanServerFactory.releaseMBeanServer(dummyJBossMBeanServer);
+ // dummyJBossMBeanServer = null;
+ // }
+ // }
+ //
+ // /**
+ // * If you need to test round trips from server to agent and back, you first
must install the server communications
+ // * service that houses all the agent clients. Call this method and add your
test agent services to the public fields
+ // * in the returned object.
+ // *
+ // * @return the object that will house your test agent service impls and the
agent clients.
+ // *
+ // * @throws RuntimeException
+ // */
+ // public TestServerCommunicationsService prepareForTestAgents() {
+ // try {
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if (mbs.isRegistered(ServerCommunicationsServiceMBean.OBJECT_NAME)) {
+ // mbs.unregisterMBean(ServerCommunicationsServiceMBean.OBJECT_NAME);
+ // }
+ // TestServerCommunicationsService testAgentContainer = new
TestServerCommunicationsService();
+ // mbs.registerMBean(testAgentContainer,
ServerCommunicationsServiceMBean.OBJECT_NAME);
+ // return testAgentContainer;
+ // } catch (Exception e) {
+ // throw new RuntimeException(e);
+ // }
+ // }
+ //
+ // /**
+ // * Call this after your tests have finished. You only need to call this if your
test previously called
+ // * {@link #prepareForTestAgents()}.
+ // */
+ // public void unprepareForTestAgents() {
+ // unprepareForTestAgents(false);
+ // }
+ //
+ // public void unprepareForTestAgents(boolean beanOnly) {
+ // try {
+ // if (beanOnly) {
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if (mbs.isRegistered(ServerCommunicationsServiceMBean.OBJECT_NAME))
{
+ //
mbs.unregisterMBean(ServerCommunicationsServiceMBean.OBJECT_NAME);
+ // }
+ // } else {
+ // releaseJBossMBeanServer();
+ // }
+ // } catch (Exception e) {
+ // throw new RuntimeException(e);
+ // }
+ // }
+ //
+ // /**
+ // * If you need to test server plugins, you must first prepare the server plugin
service.
+ // * After this returns, the caller must explicitly start the PC by using the
appropriate API
+ // * on the given mbean; this method will only start the service, it will NOT
start the master PC.
+ // *
+ // * @param testServiceMBean the object that will house your test server plugins
+ // *
+ // * @throws RuntimeException
+ // */
+ // public void prepareCustomServerPluginService(ServerPluginService
testServiceMBean) {
+ // try {
+ // MBeanServer mbs = getJBossMBeanServer();
+ // testServiceMBean.start();
+ // mbs.registerMBean(testServiceMBean,
ServerPluginServiceMBean.OBJECT_NAME);
+ // serverPluginService = testServiceMBean;
+ // return;
+ // } catch (Exception e) {
+ // throw new RuntimeException(e);
+ // }
+ // }
+ //
+ // public void unprepareServerPluginService() throws Exception {
+ // unprepareServerPluginService(false);
+ // }
+ //
+ // public void unprepareServerPluginService(boolean beanOnly) throws Exception {
+ // if (serverPluginService != null) {
+ // serverPluginService.stopMasterPluginContainer();
+ // serverPluginService.stop();
+ // if (beanOnly) {
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if (mbs.isRegistered(ServerPluginService.OBJECT_NAME)) {
+ //
getJBossMBeanServer().unregisterMBean(ServerPluginService.OBJECT_NAME);
+ // }
+ // if (mbs.isRegistered(ServerPluginServiceMBean.OBJECT_NAME)) {
+ //
getJBossMBeanServer().unregisterMBean(ServerPluginServiceMBean.OBJECT_NAME);
+ // }
+ //
+ // } else {
+ // releaseJBossMBeanServer();
+ // }
+ // serverPluginService = null;
+ // }
+ // }
+ //
+ // public SchedulerService getSchedulerService() {
+ // return schedulerService;
+ // }
+ //
+ // public void prepareScheduler() {
+ // try {
+ // if (schedulerService != null) {
+ // return;
+ // }
+ //
+ // Properties quartzProps = new Properties();
+ //
quartzProps.load(this.getClass().getClassLoader().getResourceAsStream("test-scheduler.properties"));
+ //
+ // schedulerService = new SchedulerService();
+ // schedulerService.setQuartzProperties(quartzProps);
+ // schedulerService.start();
+ // getJBossMBeanServer().registerMBean(schedulerService,
SchedulerServiceMBean.SCHEDULER_MBEAN_NAME);
+ // schedulerService.startQuartzScheduler();
+ // return;
+ // } catch (Exception e) {
+ // e.printStackTrace();
+ // throw new RuntimeException(e);
+ // }
+ // }
+ //
+ // public void unprepareScheduler() throws Exception {
+ // unprepareScheduler(false);
+ // }
+ //
+ // public void unprepareScheduler(boolean beanOnly) throws Exception {
+ // if (schedulerService != null) {
+ // schedulerService.stop();
+ // if (beanOnly) {
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if (mbs.isRegistered(SchedulerServiceMBean.SCHEDULER_MBEAN_NAME))
{
+ //
getJBossMBeanServer().unregisterMBean(SchedulerServiceMBean.SCHEDULER_MBEAN_NAME);
+ // }
+ // } else {
+ // releaseJBossMBeanServer();
+ // }
+ //
+ // schedulerService = null;
+ // }
+ // }
+ //
+ // public PluginDeploymentScannerMBean getPluginScannerService() {
+ // return pluginScannerService;
+ // }
+ //
+ // protected void preparePluginScannerService() {
+ // preparePluginScannerService(null);
+ // }
+ //
+ // public void preparePluginScannerService(PluginDeploymentScannerMBean
scannerService) {
+ // try {
+ // if (scannerService == null) {
+ // scannerService = new PluginDeploymentScanner();
+ // }
+ // MBeanServer mbs = getJBossMBeanServer();
+ // mbs.registerMBean(scannerService,
PluginDeploymentScannerMBean.OBJECT_NAME);
+ // pluginScannerService = scannerService;
+ // return;
+ // } catch (Exception e) {
+ // e.printStackTrace();
+ // throw new RuntimeException(e);
+ // }
+ // }
+ //
+ // public void unpreparePluginScannerService() throws Exception {
+ // unpreparePluginScannerService(false);
+ // }
+ //
+ // public void unpreparePluginScannerService(boolean beanOnly) throws Exception {
+ // if (pluginScannerService != null) {
+ // pluginScannerService.stop();
+ // if (beanOnly) {
+ // MBeanServer mbs = getJBossMBeanServer();
+ // if (mbs.isRegistered(PluginDeploymentScannerMBean.OBJECT_NAME)) {
+ //
getJBossMBeanServer().unregisterMBean(PluginDeploymentScannerMBean.OBJECT_NAME);
+ // }
+ // } else {
+ // releaseJBossMBeanServer();
+ // }
+ //
+ // pluginScannerService = null;
+ // }
+ // }
+ //
+ // protected void executeInTransaction(TransactionCallback callback) {
+ // executeInTransaction(callback);
+ // }
+}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/TransactionCallback.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/TransactionCallback.java
new file mode 100644
index 0000000..cec66cb
--- /dev/null
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/TransactionCallback.java
@@ -0,0 +1,7 @@
+package org.rhq.enterprise.server.test;
+
+public interface TransactionCallback {
+
+ void execute() throws Exception;
+
+}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/TransactionCallbackReturnable.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/TransactionCallbackReturnable.java
new file mode 100644
index 0000000..cd0389e
--- /dev/null
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/TransactionCallbackReturnable.java
@@ -0,0 +1,7 @@
+package org.rhq.enterprise.server.test;
+
+public interface TransactionCallbackReturnable<T extends Object> {
+
+ T execute() throws Exception;
+
+}
diff --git a/modules/test-utils/src/main/java/org/rhq/test/JPAUtils.java
b/modules/test-utils/src/main/java/org/rhq/test/JPAUtils.java
index 8d6d810..5819a1b 100644
--- a/modules/test-utils/src/main/java/org/rhq/test/JPAUtils.java
+++ b/modules/test-utils/src/main/java/org/rhq/test/JPAUtils.java
@@ -131,154 +131,5 @@ public class JPAUtils {
return list.toString();
}
- public static void clearDB() {
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = lookupEntityManager();
-
- em.createNativeQuery("delete from jms_subscriptions");
- em.createNativeQuery("delete from jms_roles");
- em.createNativeQuery("delete from jms_users");
- em.createNativeQuery("delete from jms_transactions");
- em.createNativeQuery("delete from jms_messages");
- em.createNativeQuery("delete from rhq_drift_config_map");
- em.createNativeQuery("delete from rhq_drift_template_map");
- em.createNativeQuery("delete from rhq_delete_res_hist");
- em.createNativeQuery("delete from rhq_create_res_hist");
- em.createNativeQuery("delete from
rhq_tagging_bundle_dest_map");
- em.createNativeQuery("delete from
rhq_tagging_bundle_deploy_map");
- em.createNativeQuery("delete from
rhq_tagging_bundle_version_map");
- em.createNativeQuery("delete from rhq_tagging_bundle_map");
- em.createNativeQuery("delete from rhq_bundle_res_dep_hist");
- em.createNativeQuery("delete from rhq_bundle_res_deploy");
- em.createNativeQuery("delete from rhq_bundle_deployment");
- em.createNativeQuery("delete from rhq_bundle_destination");
- em.createNativeQuery("delete from rhq_bundle_file");
- em.createNativeQuery("delete from rhq_bundle_version_repo");
- em.createNativeQuery("delete from rhq_bundle_version");
- em.createNativeQuery("delete from rhq_bundle");
- em.createNativeQuery("delete from rhq_bundle_type");
- em.createNativeQuery("delete from rhq_repo_advisory");
- em.createNativeQuery("delete from rhq_advisory_buglist");
- em.createNativeQuery("delete from rhq_advisory_cve");
- em.createNativeQuery("delete from rhq_cve");
- em.createNativeQuery("delete from rhq_advisory_package");
- em.createNativeQuery("delete from rhq_advisory");
- em.createNativeQuery("delete from rhq_distribution_file");
- em.createNativeQuery("delete from rhq_repo_distribution");
- em.createNativeQuery("delete from rhq_distribution where id not in
(1, 2)");
- em.createNativeQuery("delete from rhq_pkg_prd_map");
- em.createNativeQuery("delete from
rhq_pkg_ver_content_src_map");
- em.createNativeQuery("delete from rhq_repo_pkg_version_map");
- em.createNativeQuery("delete from
rhq_repo_repo_relation_map");
- em.createNativeQuery("delete from rhq_repo_repo_group_map");
- em.createNativeQuery("delete from rhq_repo_content_src_map");
- em.createNativeQuery("delete from rhq_repo_resource_map");
- em.createNativeQuery("delete from rhq_package_inst_step");
- em.createNativeQuery("delete from rhq_repo_sync");
- em.createNativeQuery("delete from rhq_content_src_sync");
- em.createNativeQuery("delete from rhq_installed_pkg_hist");
- em.createNativeQuery("delete from rhq_installed_package");
- em.createNativeQuery("delete from rhq_content_req");
- em.createNativeQuery("delete from rhq_package_version");
- em.createNativeQuery("delete from rhq_package_bits");
- em.createNativeQuery("delete from rhq_package");
- em.createNativeQuery("delete from rhq_package_type");
- em.createNativeQuery("delete from rhq_repo_relation");
- em.createNativeQuery("delete from rhq_repo_relation_type where id
not in (1, 2)");
- em.createNativeQuery("delete from rhq_repo");
- em.createNativeQuery("delete from rhq_repo_group");
- em.createNativeQuery("delete from rhq_repo_group_type where id
<> 1");
- em.createNativeQuery("delete from rhq_archirtecture where id < 1
and id > 38");
- em.createNativeQuery("delete from rhq_meas_data_num_r14");
- em.createNativeQuery("delete from rhq_meas_data_num_r13");
- em.createNativeQuery("delete from rhq_meas_data_num_r12");
- em.createNativeQuery("delete from rhq_meas_data_num_r11");
- em.createNativeQuery("delete from rhq_meas_data_num_r10");
- em.createNativeQuery("delete from rhq_meas_data_num_r09");
- em.createNativeQuery("delete from rhq_meas_data_num_r08");
- em.createNativeQuery("delete from rhq_meas_data_num_r07");
- em.createNativeQuery("delete from rhq_meas_data_num_r06");
- em.createNativeQuery("delete from rhq_meas_data_num_r05");
- em.createNativeQuery("delete from rhq_meas_data_num_r04");
- em.createNativeQuery("delete from rhq_meas_data_num_r03");
- em.createNativeQuery("delete from rhq_meas_data_num_r02");
- em.createNativeQuery("delete from rhq_meas_data_num_r01");
- em.createNativeQuery("delete from rhq_meas_data_num_r00");
- em.createNativeQuery("delete from rhq_measurement_oob_tmp");
- em.createNativeQuery("delete rhq_measurement_oob");
- em.createNativeQuery("delete rhq_resource_avail");
- em.createNativeQuery("delete from rhq_availability");
- em.createNativeQuery("delete from rhq_calltime_data_value");
- em.createNativeQuery("delete from rhq_calltime_data_key");
- em.createNativeQuery("delete from
rhq_measurement_data_trait");
- em.createNativeQuery("delete from
rhq_measurement_data_num_1d");
- em.createNativeQuery("delete from
rhq_measurement_data_num_6h");
- em.createNativeQuery("delete from
rhq_measurement_data_num_1h");
- em.createNativeQuery("delete from rhq_measurement_bline");
- em.createNativeQuery("delete from rhq_measurement_sched");
- em.createNativeQuery("delete from rhq_measurement_def");
- em.createNativeQuery("delete from rhq_plugin");
- em.createNativeQuery("delete from rhq_system_config where id not in
(1, 2, 3, 4, 9, 10, 32, 34, 35, 36, 51, 52, 53, 54, 55, 56, 57, 58)");
- em.createNativeQuery("delete from rhq_alert_notification");
- em.createNativeQuery("delete from rhq_alert_condition_log");
- em.createNativeQuery("delete from rhq_alert");
- em.createNativeQuery("delete from rhq_alert_condition");
- em.createNativeQuery("delete from rhq_alert_dampen_event");
- em.createNativeQuery("delete from rhq_alert_definition");
- em.createNativeQuery("delete from rhq_event");
- em.createNativeQuery("delete from rhq_event_source");
- em.createNativeQuery("delete from rhq_event_def");
- em.createNativeQuery("delete from rhq_operation_schedule");
- em.createNativeQuery("delete from rhq_operation_history");
- em.createNativeQuery("delete from rhq_operation_def");
- em.createNativeQuery("delete from rhq_dashboard_portlet");
- em.createNativeQuery("delete from rhq_dashboard");
- em.createNativeQuery("delete from rhq_saved_search");
- em.createNativeQuery("delete from rhq_subject_role_ldap_map");
- em.createNativeQuery("delete from rhq_subject_role_map where id not
in (1, 2)");
- em.createNativeQuery("delete from rhq_permission where role_id not
in (1, 2)");
- em.createNativeQuery("delete from rhq_role_ldap_group");
- em.createNativeQuery("delete from
rhq_role_resource_group_map");
- em.createNativeQuery("delete from rhq_role where id not in (1,
2)");
- em.createNativeQuery("delete from rhq_tagging_res_group_map");
- em.createNativeQuery("delete from rhq_tagging_resource_map");
- em.createNativeQuery("delete from rhq_tagging");
- em.createNativeQuery("delete from rhq_config_update");
- em.createNativeQuery("delete from rhq_config_group_update");
- em.createNativeQuery("delete from
rhq_resource_group_res_exp_map");
- em.createNativeQuery("delete from
rhq_resource_group_res_imp_map");
- em.createNativeQuery("delete from rhq_resource_group");
- em.createNativeQuery("delete from rhq_group_def");
- em.createNativeQuery("delete from rhq_resource_error");
- em.createNativeQuery("delete from rhq_resource");
- em.createNativeQuery("delete from rhq_prd_ver");
- em.createNativeQuery("delete from rhq_process_scan");
- em.createNativeQuery("delete from rhq_resource_type_parents");
- em.createNativeQuery("delete from rhq_resource_subcat");
- em.createNativeQuery("delete from rhq_resource_type");
- em.createNativeQuery("delete from rhq_subject where id not in (1,
2)");
- em.createNativeQuery("delete from rhq_principal where id <>
2");
- em.createNativeQuery("delete from rhq_failover_details");
- em.createNativeQuery("delete from rhq_failover_list");
- em.createNativeQuery("delete from rhq_partition_details");
- em.createNativeQuery("delete from rhq_partition_event");
- em.createNativeQuery("delete from rhq_agent");
- em.createNativeQuery("delete from rhq_server");
- em.createNativeQuery("delete from rhq_affinity_group");
- em.createNativeQuery("delete from rhq_raw_config");
- em.createNativeQuery("delete from rhq_config_template");
- em.createNativeQuery("delete from rhq_config_property");
- em.createNativeQuery("delete from rhq_config");
- em.createNativeQuery("delete from rhq_config_prop_constr");
- em.createNativeQuery("delete from rhq_conf_prop_def_enum");
- em.createNativeQuery("delete from rhq_config_pd_osrc");
- em.createNativeQuery("delete from rhq_config_prop_def");
- em.createNativeQuery("delete from rhq_config_prop_grp_def");
- em.createNativeQuery("delete from rhq_config_def");
- }
- });
- }
}
commit d59617ace8a18c0c25467f6b87c158c4ee141cd9
Author: Jay Shaughnessy <jshaughn(a)jshaughn.csb>
Date: Mon Oct 22 14:07:03 2012 -0400
more .classpath stuff for new deps
diff --git a/.classpath b/.classpath
index e9ae8a8..5570123 100644
--- a/.classpath
+++ b/.classpath
@@ -1,6 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src"
path="modules/common/ant-bundle/src/main/java"/>
+ <classpathentry kind="src"
path="modules/enterprise/scripting/javascript/src/main/java"/>
+ <classpathentry kind="src"
path="modules/enterprise/scripting/python/src/main/java"/>
+ <classpathentry kind="src"
path="modules/enterprise/scripting/python/src/test/java"/>
+ <classpathentry kind="src"
path="modules/enterprise/scripting/javascript/src/test/java"/>
<classpathentry kind="src"
path="modules/enterprise/gui/installer/src/test/java"/>
<classpathentry kind="src"
path="modules/common/jboss-as-dmr-client/src/test/java"/>
<classpathentry kind="src"
path="modules/common/jboss-as-dmr-client/src/main/java"/>
@@ -322,5 +326,7 @@
<classpathentry exported="true" kind="var"
path="M2_REPO/jboss/jboss-embeddable-ejb3/jboss-ejb3-all/1.0.0.Alpha9/jboss-ejb3-all-1.0.0.Alpha9.jar"/>
<classpathentry exported="true" kind="var"
path="JDK_HOME/lib/tools.jar"/>
<classpathentry kind="var"
path="M2_REPO/org/jboss/remotingjmx/remoting-jmx/1.0.2.Final/remoting-jmx-1.0.2.Final.jar"/>
+ <classpathentry kind="var"
path="M2_REPO/org/mozilla/rhino/1.7R4/rhino-1.7R4.jar"/>
+ <classpathentry kind="var"
path="M2_REPO/org/python/jython-standalone/2.5.2/jython-standalone-2.5.2.jar"/>
<classpathentry kind="output" path="eclipse-classes"/>
</classpath>