modules/enterprise/server/itests/pom.xml
| 263 ++++
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginService.java
| 146 ++
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginServiceMBean.java
| 25
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftServerTest.java
| 241 +++
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
| 603 ++++++++++
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/InitDB.java
| 32
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
| 309 +++++
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
| 223 +++
modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
| 236 +++
modules/enterprise/server/itests/src/test/resources/META-INF/ejb-jar.xml
| 28
modules/enterprise/server/itests/src/test/resources/binary-blob-sample.jar
|binary
modules/enterprise/server/itests/src/test/resources/default.persistence.properties
| 22
modules/enterprise/server/itests/src/test/resources/ejb3-interceptors-aop.xml
| 360 +++++
modules/enterprise/server/itests/src/test/resources/embedded-jboss-beans.xml
| 160 ++
modules/enterprise/server/itests/src/test/resources/jboss-jms-beans.xml
| 132 ++
modules/enterprise/server/itests/src/test/resources/jms-ra.rar
|binary
modules/enterprise/server/itests/src/test/resources/jndi.properties
| 2
modules/enterprise/server/itests/src/test/resources/log4j.xml
| 74 +
modules/enterprise/server/itests/src/test/resources/login-config.xml
| 72 +
modules/enterprise/server/itests/src/test/resources/rhq-mdb-beans.xml
| 25
modules/enterprise/server/itests/src/test/resources/security-beans.xml
| 13
modules/enterprise/server/itests/src/test/resources/test-assist-color-number.txt
| 46
modules/enterprise/server/itests/src/test/resources/test-ldap.properties
| 2
modules/enterprise/server/itests/src/test/resources/test-scheduler.properties
| 29
modules/enterprise/server/itests/src/test/resources/testng.xml
| 12
modules/enterprise/server/jar/pom.xml
| 1
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginService.java
| 146 --
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginServiceMBean.java
| 25
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/DriftServerTest.java
| 242 ----
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
| 600 ---------
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/InitDB.java
| 32
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
| 306 -----
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
| 222 ---
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
| 235 ---
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/test/AbstractEJB3Test.java
| 15
modules/enterprise/server/pom.xml
| 1
36 files changed, 3067 insertions(+), 1813 deletions(-)
New commits:
commit 62bc3e9330af52494db77e43ebbe656b71028d21
Author: John Sanda <jsanda(a)redhat.com>
Date: Tue Nov 1 13:43:50 2011 -0400
no longer need to exclude drift tests in server/jar
diff --git a/modules/enterprise/server/jar/pom.xml
b/modules/enterprise/server/jar/pom.xml
index 67c95af..541313b 100644
--- a/modules/enterprise/server/jar/pom.xml
+++ b/modules/enterprise/server/jar/pom.xml
@@ -610,7 +610,6 @@ Build-OS-Version=${os.version}
<excludes>
<exclude>com/**/*.java</exclude>
<exclude>org/rhq/**/performance/**/*.java</exclude>
- <exclude>**/drift/*.java</exclude>
</excludes>
<excludedGroups>${rhq.testng.excludedGroups}</excludedGroups>
<groups>${rhq.testng.includedGroups}</groups>
commit bcd034ffdc3d4883bada50bb801f202acacc4ff3
Author: John Sanda <jsanda(a)redhat.com>
Date: Tue Nov 1 13:35:21 2011 -0400
removing unnecessary dependencies
diff --git a/modules/enterprise/server/itests/pom.xml
b/modules/enterprise/server/itests/pom.xml
index 6d871a1..f512aed 100644
--- a/modules/enterprise/server/itests/pom.xml
+++ b/modules/enterprise/server/itests/pom.xml
@@ -15,8 +15,8 @@
<description>RHQ enterprise server integration tests</description>
<scm>
-
<
connection>scm:git:ssh://git.fedorahosted.org/git/rhq.git/modules/ente...
-
<
developerConnection>scm:git:ssh://git.fedorahosted.org/git/rhq.git/mod...
+
<
connection>scm:git:ssh://git.fedorahosted.org/git/rhq.git/modules/ente...
+
<
developerConnection>scm:git:ssh://git.fedorahosted.org/git/rhq.git/mod...
</scm>
<properties>
@@ -26,42 +26,6 @@
</properties>
<dependencies>
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-enterprise-comm</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-enterprise-server-xml-schemas</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-core-domain</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-core-client-api</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-common-drift</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>com.googlecode.java-diff-utils</groupId>
- <artifactId>diffutils</artifactId>
- <version>1.2.1</version>
- </dependency>
-
<!--================ Test Deps ================-->
<!-- Note, the test deps are intentionally placed above the other scoped deps
because of classpath
@@ -140,19 +104,12 @@
<!-- NOTE: The remaining test deps correspond to the classes contained in
hibernate-all.jar and thirdparty-all.jar. -->
<dependency>
- <groupId>antlr</groupId>
- <artifactId>antlr</artifactId>
- <version>2.7.7</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
<groupId>jboss</groupId>
<artifactId>javassist</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
<scope>test</scope>
</dependency>
+ <!-- needed by embedded ejb container -->
<dependency>
<groupId>trove</groupId>
<artifactId>trove</artifactId>
@@ -160,6 +117,7 @@
<scope>test</scope>
</dependency>
+ <!-- needed by embedded ejb container -->
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
@@ -167,63 +125,8 @@
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>net.sf.opencsv</groupId>
- <artifactId>opencsv</artifactId>
- <version>1.8</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>commons-jxpath</groupId>
- <artifactId>commons-jxpath</artifactId>
- <version>1.3</version>
- <scope>test</scope>
- </dependency>
-
-
<!-- 3rd Party Deps -->
- <dependency>
- <groupId>org.antlr</groupId>
- <artifactId>antlr</artifactId>
- <version>3.2</version>
- </dependency>
-
- <!-- Required by a couple APL and Lather classes - TODO: Remove this once APL
and Lather have been excised. -->
- <dependency>
- <groupId>commons-beanutils</groupId>
- <artifactId>commons-beanutils</artifactId>
- <version>1.6.1</version>
- </dependency>
-
- <!-- Required by a couple APL classes - TODO: Remove this once APL has been
removed. -->
- <!-- also required by EJB3 Embedded (test scope) -->
- <dependency>
- <groupId>commons-collections</groupId>
- <artifactId>commons-collections</artifactId>
- <version>3.2</version>
- </dependency>
-
- <dependency>
- <groupId>commons-httpclient</groupId>
- <artifactId>commons-httpclient</artifactId>
- <version>3.0.1</version>
- </dependency>
-
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- <version>2.4</version>
- </dependency>
-
- <!-- Required by a couple APL classes - TODO: Remove this once APL has been
removed. -->
- <dependency>
- <groupId>commons-validator</groupId>
- <artifactId>commons-validator</artifactId>
- <version>1.1.4</version>
- </dependency>
-
<!-- required by RHQ server classes, as well as EJB3 Embedded -->
<dependency>
<groupId>dom4j</groupId>
@@ -233,12 +136,6 @@
</dependency>
<dependency>
- <groupId>gnu-getopt</groupId>
- <artifactId>getopt</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- </dependency>
-
- <dependency>
<groupId>hibernate</groupId>
<artifactId>hibernate3</artifactId>
<!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
@@ -255,22 +152,13 @@
<dependency>
<groupId>hibernate-entitymanager</groupId>
<artifactId>hibernate-entitymanager</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>i18nlog</groupId>
- <artifactId>i18nlog</artifactId>
+ <scope>provided</scope>
</dependency>
<dependency>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-javamail_1.3.1_spec</artifactId>
- <!-- The Sun javamail jar isn't available from a public repo due to
licensing issues,
- so use the Geronimo one instead. -->
- <version>1.3</version>
- <scope>provided</scope> <!-- by JBossAS -->
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ <version>1.4</version>
</dependency>
<dependency>
@@ -281,47 +169,12 @@
</dependency>
<dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <version>2.4</version>
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>jsp-api</artifactId>
- <version>2.0</version>
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
<groupId>jboss</groupId>
<artifactId>jboss-annotations-ejb3</artifactId>
<!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
<scope>provided</scope> <!-- by JBossAS -->
</dependency>
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-cache</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>compile</scope>
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-common</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-ejb3x</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
<!-- includes the org.jboss.ejb3.StrictMaxPool class, which is needed by the
PoolClass annotation used on some
of our SLSB's -->
<dependency>
@@ -331,40 +184,6 @@
<scope>provided</scope> <!-- by JBossAS -->
</dependency>
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-j2ee</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-jmx</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-system</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jbosssx</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jbpm</artifactId>
- <version>3.1.1</version>
- </dependency>
-
<!-- for the transaction interrupt EJB3 interceptor -->
<dependency>
<groupId>org.jboss.transaction</groupId>
@@ -387,92 +206,20 @@
<scope>provided</scope> <!-- by JBossAS itself, which the
container build has packaged with 1.6.5 -->
</dependency>
+ <!-- This is needed cglib which is in turn needed by hibernate -->
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymockclassextension</artifactId>
<version>2.2</version>
<scope>test</scope>
- <!-- somehow this is needed otherwise the hibernate stuff doesn't
initialize in our tests -->
- </dependency>
-
- <dependency>
- <groupId>org.snmp4j</groupId>
- <artifactId>snmp4j</artifactId>
- <version>1.8.2</version>
</dependency>
- <!-- required by RHQ server classes, as well as EJB3 Embedded -->
- <dependency>
- <groupId>oswego-concurrent</groupId>
- <artifactId>concurrent</artifactId>
- <version>1.3.4</version>
- </dependency>
-
- <!-- TODO: Why is this needed? -->
- <dependency>
- <groupId>postgresql</groupId>
- <artifactId>postgresql</artifactId>
- <!--<scope>test</scope>-->
- </dependency>
-
- <dependency>
- <groupId>rss4j</groupId>
- <artifactId>rss4j</artifactId>
- <version>0.92-on.2</version>
- </dependency>
-
- <dependency>
- <groupId>tomcat</groupId>
- <artifactId>catalina</artifactId>
- <version>5.5.20</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>tomcat</groupId>
- <artifactId>tomcat-jk</artifactId>
- <version>4.1.31</version>
- <scope>provided</scope>
- </dependency>
-
- <!-- Needed by com.jboss.jbossnetwork.apl.actions.xml.XPathProcessor; TODO:
Remove once APL has been excised. -->
- <dependency>
- <groupId>xalan</groupId>
- <artifactId>xalan</artifactId>
- <version>2.5.1</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>com.jcraft</groupId>
- <artifactId>jsch</artifactId>
- <version>0.1.29</version>
- </dependency>
-
- <dependency>
- <groupId>org.jboss.el</groupId>
- <artifactId>jboss-el</artifactId>
- <version>2.0.1.GA</version>
- <scope>provided</scope>
- </dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.18</version>
<scope>provided</scope>
</dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-core-dbutils</artifactId>
- <version>${project.version}</version>
- <exclusions>
- <exclusion>
- <groupId>ant</groupId>
- <artifactId>ant</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
</dependencies>
<build>
@@ -487,45 +234,6 @@
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
-
- <execution>
- <phase>process-classes</phase>
- <configuration>
- <tasks>
- <!-- generate the I18N resource bundles -->
- <taskdef name="i18n"
classpathref="maven.runtime.classpath"
classname="mazz.i18n.ant.I18NAntTask" />
-
- <i18n outputdir="${project.build.outputDirectory}"
defaultlocale="en" verbose="false" append="false"
verify="true">
- <classpath refid="maven.runtime.classpath" />
- <classfileset
dir="${project.build.outputDirectory}">
- <include
name="**/ServerI18NResourceKeys.class" />
- <include name="**/AlertI18NResourceKeys.class"
/>
- </classfileset>
- </i18n>
-
- <!-- create our rhq-server-version.properties file that goes
in our jar -->
- <tstamp>
- <format property="build.time"
pattern="dd.MMM.yyyy HH.mm.ss z" />
- </tstamp>
-
- <echo
file="${project.build.outputDirectory}/rhq-server-version.properties"
append="false">Product-Name=${rhq.product.name}
-Product-Version=${project.version}
-Module-Name=${project.name}
-Module-Version=${project.version}
-Build-Number=${buildNumber}
-Build-Date=${build.time}
-Build-Jdk-Vendor=${java.vendor}
-Build-Jdk=${java.version}
-Build-OS-Name=${os.name}
-Build-OS-Version=${os.version}
-</echo>
- </tasks>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
-
<!-- in order to get JMS to work properly in embedded test container,
extract jms-rs.rar classes -->
<execution>
<id>Extract JMS classes from RAR needed for JMS tests</id>
@@ -548,7 +256,6 @@ Build-OS-Version=${os.version}
<goal>run</goal>
</goals>
</execution>
-
</executions>
</plugin>
</plugins>
commit 97168e68c88467c33a85f8f5e376c59545edb704
Author: John Sanda <jsanda(a)redhat.com>
Date: Tue Nov 1 11:34:11 2011 -0400
Renaming module integration-tests to itests
diff --git a/modules/enterprise/server/integration-tests/pom.xml
b/modules/enterprise/server/integration-tests/pom.xml
deleted file mode 100644
index 7c29615..0000000
--- a/modules/enterprise/server/integration-tests/pom.xml
+++ /dev/null
@@ -1,556 +0,0 @@
-<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-parent</artifactId>
- <version>4.1.0-SNAPSHOT</version>
- <relativePath>../../../../pom.xml</relativePath>
- </parent>
-
- <artifactId>rhq-server-integration-tests</artifactId>
-
- <name>RHQ Server Integration Tests</name>
- <description>RHQ enterprise server integration tests</description>
-
- <scm>
-
<
connection>scm:git:ssh://git.fedorahosted.org/git/rhq.git/modules/ente...
-
<
developerConnection>scm:git:ssh://git.fedorahosted.org/git/rhq.git/mod...
- </scm>
-
- <properties>
- <rhq.server.datasource>java:/RHQDS</rhq.server.datasource>
- <rhq.server.ds-mapping>PostgreSQL</rhq.server.ds-mapping>
-
<jboss-embeddable-ejb3.version>1.0.0.Alpha9</jboss-embeddable-ejb3.version>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-enterprise-comm</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-enterprise-server-xml-schemas</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-core-domain</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-core-client-api</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-common-drift</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>com.googlecode.java-diff-utils</groupId>
- <artifactId>diffutils</artifactId>
- <version>1.2.1</version>
- </dependency>
-
- <!--================ 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. -->
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>test-utils</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- <exclusions>
- <exclusion>
- <groupId>org.testng</groupId>
- <artifactId>testng</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-core-domain</artifactId>
- <version>${project.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-enterprise-server</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-enterprise-server</artifactId>
- <version>${project.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>rhq-core-client-api</artifactId>
- <version>${project.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.rhq.helpers</groupId>
- <artifactId>perftest-support</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- <exclusions>
- <exclusion>
- <groupId>ant</groupId>
- <artifactId>ant</artifactId>
- </exclusion>
- <exclusion>
- <groupId>ant</groupId>
- <artifactId>ant-launcher</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>jboss.jboss-embeddable-ejb3</groupId>
- <artifactId>jboss-ejb3-all</artifactId>
- <version>${jboss-embeddable-ejb3.version}</version>
- <scope>test</scope>
- </dependency>
-
- <!-- NOTE: The remaining test deps correspond to the classes contained in
hibernate-all.jar and thirdparty-all.jar. -->
-
- <dependency>
- <groupId>antlr</groupId>
- <artifactId>antlr</artifactId>
- <version>2.7.7</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>javassist</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>trove</groupId>
- <artifactId>trove</artifactId>
- <version>1.0.2</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>xerces</groupId>
- <artifactId>xercesImpl</artifactId>
- <version>2.8.1</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>net.sf.opencsv</groupId>
- <artifactId>opencsv</artifactId>
- <version>1.8</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>commons-jxpath</groupId>
- <artifactId>commons-jxpath</artifactId>
- <version>1.3</version>
- <scope>test</scope>
- </dependency>
-
-
- <!-- 3rd Party Deps -->
-
- <dependency>
- <groupId>org.antlr</groupId>
- <artifactId>antlr</artifactId>
- <version>3.2</version>
- </dependency>
-
- <!-- Required by a couple APL and Lather classes - TODO: Remove this once APL
and Lather have been excised. -->
- <dependency>
- <groupId>commons-beanutils</groupId>
- <artifactId>commons-beanutils</artifactId>
- <version>1.6.1</version>
- </dependency>
-
- <!-- Required by a couple APL classes - TODO: Remove this once APL has been
removed. -->
- <!-- also required by EJB3 Embedded (test scope) -->
- <dependency>
- <groupId>commons-collections</groupId>
- <artifactId>commons-collections</artifactId>
- <version>3.2</version>
- </dependency>
-
- <dependency>
- <groupId>commons-httpclient</groupId>
- <artifactId>commons-httpclient</artifactId>
- <version>3.0.1</version>
- </dependency>
-
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- <version>2.4</version>
- </dependency>
-
- <!-- Required by a couple APL classes - TODO: Remove this once APL has been
removed. -->
- <dependency>
- <groupId>commons-validator</groupId>
- <artifactId>commons-validator</artifactId>
- <version>1.1.4</version>
- </dependency>
-
- <!-- required by RHQ server classes, as well as EJB3 Embedded -->
- <dependency>
- <groupId>dom4j</groupId>
- <artifactId>dom4j</artifactId>
- <version>1.6.1-jboss</version>
- <scope>runtime</scope>
- </dependency>
-
- <dependency>
- <groupId>gnu-getopt</groupId>
- <artifactId>getopt</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- </dependency>
-
- <dependency>
- <groupId>hibernate</groupId>
- <artifactId>hibernate3</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>hibernate-annotations</groupId>
- <artifactId>hibernate-annotations</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>hibernate-entitymanager</groupId>
- <artifactId>hibernate-entitymanager</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>i18nlog</groupId>
- <artifactId>i18nlog</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-javamail_1.3.1_spec</artifactId>
- <!-- The Sun javamail jar isn't available from a public repo due to
licensing issues,
- so use the Geronimo one instead. -->
- <version>1.3</version>
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>javax.persistence</groupId>
- <artifactId>persistence-api</artifactId>
- <version>1.0</version>
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <version>2.4</version>
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>jsp-api</artifactId>
- <version>2.0</version>
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-annotations-ejb3</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-cache</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>compile</scope>
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-common</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-ejb3x</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <!-- includes the org.jboss.ejb3.StrictMaxPool class, which is needed by the
PoolClass annotation used on some
- of our SLSB's -->
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-ejb3</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-j2ee</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-jmx</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-system</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jbosssx</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jbpm</artifactId>
- <version>3.1.1</version>
- </dependency>
-
- <!-- for the transaction interrupt EJB3 interceptor -->
- <dependency>
- <groupId>org.jboss.transaction</groupId>
- <artifactId>jboss-jta</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>org.opensymphony.quartz</groupId>
- <artifactId>quartz</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS itself, which the
container build has packaged with 1.6.5 -->
- </dependency>
-
- <dependency>
- <groupId>org.opensymphony.quartz</groupId>
- <artifactId>quartz-oracle</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
- <scope>provided</scope> <!-- by JBossAS itself, which the
container build has packaged with 1.6.5 -->
- </dependency>
-
- <dependency>
- <groupId>org.easymock</groupId>
- <artifactId>easymockclassextension</artifactId>
- <version>2.2</version>
- <scope>test</scope>
- <!-- somehow this is needed otherwise the hibernate stuff doesn't
initialize in our tests -->
- </dependency>
-
- <dependency>
- <groupId>org.snmp4j</groupId>
- <artifactId>snmp4j</artifactId>
- <version>1.8.2</version>
- </dependency>
-
- <!-- required by RHQ server classes, as well as EJB3 Embedded -->
- <dependency>
- <groupId>oswego-concurrent</groupId>
- <artifactId>concurrent</artifactId>
- <version>1.3.4</version>
- </dependency>
-
- <!-- TODO: Why is this needed? -->
- <dependency>
- <groupId>postgresql</groupId>
- <artifactId>postgresql</artifactId>
- <!--<scope>test</scope>-->
- </dependency>
-
- <dependency>
- <groupId>rss4j</groupId>
- <artifactId>rss4j</artifactId>
- <version>0.92-on.2</version>
- </dependency>
-
- <dependency>
- <groupId>tomcat</groupId>
- <artifactId>catalina</artifactId>
- <version>5.5.20</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>tomcat</groupId>
- <artifactId>tomcat-jk</artifactId>
- <version>4.1.31</version>
- <scope>provided</scope>
- </dependency>
-
- <!-- Needed by com.jboss.jbossnetwork.apl.actions.xml.XPathProcessor; TODO:
Remove once APL has been excised. -->
- <dependency>
- <groupId>xalan</groupId>
- <artifactId>xalan</artifactId>
- <version>2.5.1</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>com.jcraft</groupId>
- <artifactId>jsch</artifactId>
- <version>0.1.29</version>
- </dependency>
-
- <dependency>
- <groupId>org.jboss.el</groupId>
- <artifactId>jboss-el</artifactId>
- <version>2.0.1.GA</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.freemarker</groupId>
- <artifactId>freemarker</artifactId>
- <version>2.3.18</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-core-dbutils</artifactId>
- <version>${project.version}</version>
- <exclusions>
- <exclusion>
- <groupId>ant</groupId>
- <artifactId>ant</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- </dependencies>
-
- <build>
- <testResources>
- <testResource>
- <directory>src/test/resources</directory>
- <filtering>true</filtering>
- </testResource>
- </testResources>
-
- <plugins>
- <plugin>
- <artifactId>maven-antrun-plugin</artifactId>
- <executions>
-
- <execution>
- <phase>process-classes</phase>
- <configuration>
- <tasks>
- <!-- generate the I18N resource bundles -->
- <taskdef name="i18n"
classpathref="maven.runtime.classpath"
classname="mazz.i18n.ant.I18NAntTask" />
-
- <i18n outputdir="${project.build.outputDirectory}"
defaultlocale="en" verbose="false" append="false"
verify="true">
- <classpath refid="maven.runtime.classpath" />
- <classfileset
dir="${project.build.outputDirectory}">
- <include
name="**/ServerI18NResourceKeys.class" />
- <include name="**/AlertI18NResourceKeys.class"
/>
- </classfileset>
- </i18n>
-
- <!-- create our rhq-server-version.properties file that goes
in our jar -->
- <tstamp>
- <format property="build.time"
pattern="dd.MMM.yyyy HH.mm.ss z" />
- </tstamp>
-
- <echo
file="${project.build.outputDirectory}/rhq-server-version.properties"
append="false">Product-Name=${rhq.product.name}
-Product-Version=${project.version}
-Module-Name=${project.name}
-Module-Version=${project.version}
-Build-Number=${buildNumber}
-Build-Date=${build.time}
-Build-Jdk-Vendor=${java.vendor}
-Build-Jdk=${java.version}
-Build-OS-Name=${os.name}
-Build-OS-Version=${os.version}
-</echo>
- </tasks>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
-
- <!-- in order to get JMS to work properly in embedded test container,
extract jms-rs.rar classes -->
- <execution>
- <id>Extract JMS classes from RAR needed for JMS tests</id>
- <phase>process-classes</phase>
- <configuration>
- <tasks>
- <unzip src="src/test/resources/jms-ra.rar"
dest="target">
- <patternset>
- <include name="jms-ra.jar"/>
- </patternset>
- </unzip>
- <unzip src="target/jms-ra.jar"
dest="target/test-classes">
- <patternset>
- <include name="org/**"/>
- </patternset>
- </unzip>
- </tasks>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
-
- </executions>
- </plugin>
- </plugins>
- </build>
-</project>
diff --git
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginService.java
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginService.java
deleted file mode 100644
index 64c6537..0000000
---
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginService.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2011 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.drift;
-
-import java.io.File;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.rhq.core.domain.configuration.Configuration;
-import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
-import org.rhq.core.domain.plugin.PluginKey;
-import org.rhq.core.domain.plugin.PluginStatusType;
-import org.rhq.core.domain.plugin.ServerPlugin;
-import org.rhq.core.util.MessageDigestGenerator;
-import org.rhq.enterprise.server.plugin.pc.AbstractTypeServerPluginContainer;
-import org.rhq.enterprise.server.plugin.pc.MasterServerPluginContainer;
-import org.rhq.enterprise.server.plugin.pc.MasterServerPluginContainerConfiguration;
-import org.rhq.enterprise.server.plugin.pc.ServerPluginEnvironment;
-import org.rhq.enterprise.server.plugin.pc.ServerPluginManager;
-import org.rhq.enterprise.server.plugin.pc.ServerPluginService;
-import org.rhq.enterprise.server.plugin.pc.ServerPluginType;
-import org.rhq.enterprise.server.plugin.pc.drift.DriftServerPluginContainer;
-import org.rhq.enterprise.server.plugin.pc.drift.DriftServerPluginManager;
-import org.rhq.enterprise.server.xmlschema.ServerPluginDescriptorMetadataParser;
-import
org.rhq.enterprise.server.xmlschema.generated.serverplugin.ServerPluginDescriptorType;
-
-public class DriftServerPluginService extends ServerPluginService implements
DriftServerPluginServiceMBean {
-
- public TestMasterServerPluginContainer master;
- public MasterServerPluginContainerConfiguration masterConfig;
-
- public DriftServerPluginService() {
- // build the config at constructor time so tests have it even before the PC is
initialized
- File dir = new File(System.getProperty("java.io.tmpdir"),
"test-server-plugins");
- this.masterConfig = new MasterServerPluginContainerConfiguration(dir, dir, dir,
null);
- }
-
- @Override
- public MasterServerPluginContainer createMasterPluginContainer() {
- this.master = new TestMasterServerPluginContainer();
- this.master.initialize(this.masterConfig);
- return this.master;
- }
-
- class TestMasterServerPluginContainer extends MasterServerPluginContainer {
- @Override
- protected ClassLoader createRootServerPluginClassLoader() {
- return getClass().getClassLoader();
- }
-
- @Override
- protected Map<URL, ? extends ServerPluginDescriptorType>
preloadAllPlugins() throws Exception {
- // if our test never setup any plugins, ignore it and just return an empty
map
- File pluginDir = getConfiguration().getPluginDirectory();
- if (pluginDir == null || pluginDir.listFiles() == null ||
pluginDir.listFiles().length == 0) {
- return new HashMap<URL, ServerPluginDescriptorType>();
- } else {
- return super.preloadAllPlugins();
- }
- }
-
- @Override
- protected List<PluginKey> getDisabledPluginKeys() {
- // in the real world, the db is checked for enable flag, here we say all
plugins are enabled
- return new ArrayList<PluginKey>();
- }
-
- @Override
- protected List<AbstractTypeServerPluginContainer> createPluginContainers()
{
- ArrayList<AbstractTypeServerPluginContainer> pcs = new
ArrayList<AbstractTypeServerPluginContainer>(1);
- DriftServerPluginContainer driftPC = new
TestDriftServerPluginContainer(this);
- pcs.add(driftPC);
-
- return pcs;
- }
- }
-
- class TestDriftServerPluginContainer extends DriftServerPluginContainer {
- public TestDriftServerPluginContainer(MasterServerPluginContainer master) {
- super(master);
- }
-
- @Override
- protected ServerPluginManager createPluginManager() {
- return new TestDriftServerPluginManager(this);
- }
- }
-
- class TestDriftServerPluginManager extends DriftServerPluginManager {
- public TestDriftServerPluginManager(DriftServerPluginContainer pc) {
- super(pc);
- }
-
- @Override
- protected ServerPlugin getPlugin(ServerPluginEnvironment env) {
- try {
- Configuration pluginConfig = null;
- Configuration scheduledJobsConfig = null;
- ConfigurationDefinition configDef;
-
- ServerPluginDescriptorType pluginDescriptor = env.getPluginDescriptor();
-
- configDef =
ServerPluginDescriptorMetadataParser.getPluginConfigurationDefinition(pluginDescriptor);
- if (configDef != null) {
- pluginConfig = configDef.getDefaultTemplate().createConfiguration();
- }
-
- configDef =
ServerPluginDescriptorMetadataParser.getScheduledJobsDefinition(pluginDescriptor);
- if (configDef != null) {
- scheduledJobsConfig =
configDef.getDefaultTemplate().createConfiguration();
- }
-
- File pluginFile = new File(env.getPluginUrl().toURI());
- ServerPlugin plugin = new ServerPlugin(0,
env.getPluginKey().getPluginName(), pluginFile.getName(),
- pluginDescriptor.getDisplayName(), true, PluginStatusType.INSTALLED,
pluginDescriptor
- .getDescription(), "",
MessageDigestGenerator.getDigestString(pluginFile), pluginDescriptor
- .getVersion(), pluginDescriptor.getVersion(), pluginConfig,
scheduledJobsConfig,
- new ServerPluginType(pluginDescriptor).stringify(),
System.currentTimeMillis(), System
- .currentTimeMillis());
- return plugin;
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
- }
-}
diff --git
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginServiceMBean.java
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginServiceMBean.java
deleted file mode 100644
index d38374e..0000000
---
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginServiceMBean.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2011 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.drift;
-
-import org.rhq.enterprise.server.plugin.pc.ServerPluginServiceManagement;
-
-public interface DriftServerPluginServiceMBean extends ServerPluginServiceManagement {
-}
diff --git
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerTest.java
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerTest.java
deleted file mode 100644
index 7db3365..0000000
---
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerTest.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2011 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.drift;
-
-import static org.rhq.core.domain.resource.ResourceCategory.SERVER;
-import static org.rhq.enterprise.server.util.LookupUtil.getSubjectManager;
-
-import java.io.File;
-import java.lang.reflect.Method;
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.NoResultException;
-import javax.persistence.NonUniqueResultException;
-
-import org.apache.commons.io.FileUtils;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import org.rhq.core.domain.auth.Subject;
-import org.rhq.core.domain.drift.Drift;
-import org.rhq.core.domain.drift.DriftDefinition;
-import org.rhq.core.domain.drift.DriftDefinitionTemplate;
-import org.rhq.core.domain.resource.Agent;
-import org.rhq.core.domain.resource.Resource;
-import org.rhq.core.domain.resource.ResourceType;
-import org.rhq.core.domain.shared.ResourceBuilder;
-import org.rhq.core.domain.shared.ResourceTypeBuilder;
-import org.rhq.enterprise.server.plugin.ServerPluginsLocal;
-import org.rhq.enterprise.server.test.AbstractEJB3Test;
-import org.rhq.enterprise.server.test.TestServerCommunicationsService;
-import org.rhq.test.TransactionCallback;
-
-@Test(groups = "drift")
-public class DriftServerTest extends AbstractEJB3Test {
-
- protected final String RESOURCE_TYPE_NAME = getClass().getSimpleName() +
"_RESOURCE_TYPE";
-
- protected final String AGENT_NAME = getClass().getSimpleName() + "_AGENT";
-
- protected final String RESOURCE_NAME = getClass().getSimpleName() +
"_RESOURCE";
-
- private ServerPluginsLocal serverPluginsMgr;
-
- protected DriftServerPluginService driftServerPluginService;
-
- protected TestServerCommunicationsService agentServiceContainer;
-
- protected ResourceType resourceType;
-
- protected Agent agent;
-
- protected Resource resource;
-
- @BeforeMethod
- public void initServices(Method testMethod) throws Exception {
- initDriftServer();
- initAgentServices();
-
- InitDB annotation = testMethod.getAnnotation(InitDB.class);
- if (annotation == null || annotation.value()) {
- initDB();
- }
- }
-
- private void initDriftServer() throws Exception {
- driftServerPluginService = new DriftServerPluginService();
- prepareCustomServerPluginService(driftServerPluginService);
- driftServerPluginService.masterConfig.getPluginDirectory().mkdirs();
-
- File jpaDriftPlugin = new
File("../plugins/drift-rhq/target/rhq-serverplugin-drift-4.1.0-SNAPSHOT.jar");
- assertTrue("Drift server plugin JAR file not found at" +
jpaDriftPlugin.getPath(), jpaDriftPlugin.exists());
- FileUtils.copyFileToDirectory(jpaDriftPlugin,
driftServerPluginService.masterConfig.getPluginDirectory());
-
- driftServerPluginService.startMasterPluginContainer();
-
- //serverPluginsMgr = LookupUtil.getServerPlugins();
- }
-
- private void initAgentServices() {
- agentServiceContainer = prepareForTestAgents();
- agentServiceContainer.driftService = new TestDefService();
- }
-
- @AfterMethod(inheritGroups = true)
- public void shutDownServices() throws Exception {
- shutDownDriftServer();
- shutDownAgentServices();
- }
-
- private void shutDownDriftServer() throws Exception {
- unprepareServerPluginService();
- driftServerPluginService.stopMasterPluginContainer();
- }
-
- private void shutDownAgentServices() {
- agentServiceContainer = null;
- unprepareForTestAgents();
- }
-
- @AfterClass(inheritGroups = true)
- public void cleanUpDB() throws Exception {
- purgeDB();
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- purgeDB(getEntityManager());
- }
- });
- }
-
- private void initDB() throws Exception {
- purgeDB();
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
- initResourceType();
- initAgent();
- initResource();
-
- em.persist(resourceType);
- em.persist(agent);
- resource.setAgent(agent);
- em.persist(resource);
-
- initDB(em);
- }
- });
- }
-
- private void purgeDB() {
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
-
- em.createQuery("delete from JPADrift ").executeUpdate();
- em.createQuery("delete from
JPADriftChangeSet").executeUpdate();
- em.createQuery("delete from JPADriftSet").executeUpdate();
- em.createQuery("delete from JPADriftFile").executeUpdate();
- em.createQuery("delete from DriftDefinition").executeUpdate();
- em.createQuery("delete from
DriftDefinitionTemplate").executeUpdate();
-
- deleteEntity(Resource.class, RESOURCE_NAME, em);
- deleteEntity(Agent.class, AGENT_NAME, em);
- deleteEntity(ResourceType.class, RESOURCE_TYPE_NAME, em);
-
- purgeDB(em);
- }
- });
- }
-
- protected void purgeDB(EntityManager em) {
- }
-
- protected void initDB(EntityManager em) {
- }
-
- protected void deleteEntity(Class<?> clazz, String name, EntityManager em) {
- try {
- Object entity = em.createQuery(
- "select entity from " + clazz.getSimpleName() + " entity
where entity.name = :name")
- .setParameter("name", name)
- .getSingleResult();
- em.remove(entity);
- } catch (NoResultException e) {
- // we can ignore no results because this code will run when the db
- // is empty and we expect no results in that case
- } catch (NonUniqueResultException e) {
- // we will fail here to let the person running the test know that
- // the database may not be in a consistent state
- fail("Purging " + name + " failed. Expected to find one
instance of " + clazz.getSimpleName() +
- " but found more than one. The database may not be in a consistent
state.");
- }
- }
-
- protected void initResourceType() {
- resourceType = new ResourceTypeBuilder().createResourceType()
- .withId(0)
- .withName(RESOURCE_TYPE_NAME)
- .withCategory(SERVER)
- .withPlugin(RESOURCE_TYPE_NAME.toLowerCase())
- .build();
- }
-
- protected void initAgent() {
- agent = new Agent(AGENT_NAME, "localhost", 1, "", AGENT_NAME
+ "_TOKEN");
- }
-
- protected void initResource() {
- resource = new ResourceBuilder().createResource()
- .withId(0)
- .withName(RESOURCE_NAME)
- .withResourceKey(RESOURCE_NAME)
- .withRandomUuid()
- .withResourceType(resourceType)
- .build();
- }
-
- protected Subject getOverlord() {
- return getSubjectManager().getOverlord();
- }
-
- protected String toString(DriftDefinition def) {
- return "DriftDefinition[id: " + def.getId() + ", name: " +
def.getName() + "]";
- }
-
- protected String toString(DriftDefinitionTemplate template) {
- return DriftDefinitionTemplate.class.getSimpleName() + "[id: " +
template.getId() + ", name: " +
- template.getName() + "]";
- }
-
- protected Drift findDriftByPath(List<? extends Drift> drifts, String path) {
- for (Drift drift : drifts) {
- if (drift.getPath().equals(path)) {
- return drift;
- }
- }
- return null;
- }
-}
diff --git
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
deleted file mode 100644
index de93b74..0000000
---
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
+++ /dev/null
@@ -1,603 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2011 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.drift;
-
-import static java.util.Arrays.asList;
-import static org.rhq.core.domain.common.EntityContext.forResource;
-import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
-import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
-import static org.rhq.core.domain.drift.DriftChangeSetCategory.DRIFT;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.normal;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.plannedChanges;
-import static
org.rhq.core.domain.drift.DriftDefinitionComparator.CompareMode.BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS;
-import static
org.rhq.enterprise.server.safeinvoker.HibernateDetachUtility.SerializationType.SERIALIZATION;
-import static org.rhq.enterprise.server.util.LookupUtil.getDriftManager;
-import static org.rhq.enterprise.server.util.LookupUtil.getDriftTemplateManager;
-import static org.rhq.test.AssertUtils.assertPropertiesMatch;
-
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-
-import javax.ejb.EJBException;
-import javax.persistence.EntityManager;
-
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import org.rhq.core.domain.configuration.Configuration;
-import org.rhq.core.domain.criteria.DriftDefinitionCriteria;
-import org.rhq.core.domain.criteria.DriftDefinitionTemplateCriteria;
-import org.rhq.core.domain.criteria.GenericDriftChangeSetCriteria;
-import org.rhq.core.domain.criteria.JPADriftChangeSetCriteria;
-import org.rhq.core.domain.drift.Drift;
-import org.rhq.core.domain.drift.DriftChangeSet;
-import org.rhq.core.domain.drift.DriftDefinition;
-import org.rhq.core.domain.drift.DriftDefinitionComparator;
-import org.rhq.core.domain.drift.DriftDefinitionTemplate;
-import org.rhq.core.domain.drift.DriftSnapshot;
-import org.rhq.core.domain.drift.Filter;
-import org.rhq.core.domain.drift.JPADrift;
-import org.rhq.core.domain.drift.JPADriftChangeSet;
-import org.rhq.core.domain.drift.JPADriftFile;
-import org.rhq.core.domain.drift.JPADriftSet;
-import org.rhq.core.domain.resource.Resource;
-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;
-
-public class DriftTemplateManagerBeanTest extends DriftServerTest {
-
- private DriftTemplateManagerLocal templateMgr;
-
- private DriftManagerLocal driftMgr;
-
- private List<Resource> resources = new LinkedList<Resource>();
-
- private JPADrift drift1;
- private JPADrift drift2;
- private JPADriftFile driftFile1;
- private JPADriftFile driftFile2;
-
- @BeforeClass
- public void initClass() {
- templateMgr = getDriftTemplateManager();
- driftMgr = getDriftManager();
-
- }
-
- @Override
- protected void initDB(EntityManager em) {
- agentServiceContainer.driftService = new TestDefService() {
- @Override
- public void unscheduleDriftDetection(int resourceId, DriftDefinition
driftDef) {
- detach(driftDef);
- }
-
- @Override
- public void updateDriftDetection(int resourceId, DriftDefinition driftDef) {
- detach(driftDef);
- }
-
- @Override
- public void updateDriftDetection(int resourceId, DriftDefinition driftDef,
DriftSnapshot driftSnapshot) {
- detach(driftDef);
- detach(driftSnapshot);
- }
-
- private void detach(Object object) {
- try {
- HibernateDetachUtility.nullOutUninitializedFields(object,
SERIALIZATION);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
- };
- }
-
- public void createNewTemplate() {
- final DriftDefinition definition = new DriftDefinition(new Configuration());
- definition.setName("test::createNewTemplate");
- definition.setEnabled(true);
- definition.setDriftHandlingMode(normal);
- definition.setInterval(2400L);
- definition.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
-
- final DriftDefinitionTemplate newTemplate =
templateMgr.createTemplate(getOverlord(), resourceType.getId(),
- true, definition);
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
-
- ResourceType updatedType = em.find(ResourceType.class,
resourceType.getId());
-
- assertEquals("Failed to add new drift definition to resource
type", 1, updatedType
- .getDriftDefinitionTemplates().size());
-
- DriftDefinitionTemplate expectedTemplate = new
DriftDefinitionTemplate();
- expectedTemplate.setTemplateDefinition(definition);
- expectedTemplate.setUserDefined(true);
-
- assertDriftTemplateEquals("Failed to save template",
expectedTemplate, newTemplate);
- assertTrue("The template should have its id set",
newTemplate.getId() > 0);
- }
- });
- }
-
- public void createTemplateForNegativeUpdateTests() {
- DriftDefinition definition = new DriftDefinition(new Configuration());
- definition.setName("test::createTemplateForNegativeUpdateTests");
- definition.setEnabled(true);
- definition.setDriftHandlingMode(normal);
- definition.setInterval(2400L);
- definition.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
-
- templateMgr.createTemplate(getOverlord(), resourceType.getId(), true,
definition);
-
- assertNotNull("Failed to load template",
loadTemplate(definition.getName()));
- }
-
- @Test(dependsOnMethods = "createTemplateForNegativeUpdateTests",
- expectedExceptions = EJBException.class,
- expectedExceptionsMessageRegExp = ".*base directory.*cannot be
modified")
- @InitDB(false)
- public void doNotAllowBaseDirToBeUpdated() {
- DriftDefinitionTemplate template =
loadTemplate("test::createTemplateForNegativeUpdateTests");
- DriftDefinition definition = template.getTemplateDefinition();
- definition.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/TEST"));
-
- templateMgr.updateTemplate(getOverlord(), template);
- }
-
- @Test(dependsOnMethods = "createTemplateForNegativeUpdateTests",
- expectedExceptions = EJBException.class,
- expectedExceptionsMessageRegExp = ".*filters.*cannot be modified")
- @InitDB(false)
- public void doNotAllowFiltersToBeUpdated() {
- DriftDefinitionTemplate template =
loadTemplate("test::createTemplateForNegativeUpdateTests");
- DriftDefinition definition = template.getTemplateDefinition();
- definition.addExclude(new Filter("/foo/bar/TEST/conf",
"*.xml"));
-
- templateMgr.updateTemplate(getOverlord(), template);
- }
-
- @Test(dependsOnMethods = "createTemplateForNegativeUpdateTests",
- expectedExceptions = EJBException.class,
- expectedExceptionsMessageRegExp = ".*name.*cannot be modified")
- @InitDB(false)
- public void doNotAllowTemplateNameToBeUpdated() {
- DriftDefinitionTemplate template =
loadTemplate("test::createTemplateForNegativeUpdateTests");
- template.setName("A new name");
-
- templateMgr.updateTemplate(getOverlord(), template);
- }
-
- public void createAndUpdateTemplate() {
- // create the template
- DriftDefinition definition = new DriftDefinition(new Configuration());
- definition.setName("test::updateTemplate");
- definition.setDescription("update template test");
- definition.setEnabled(true);
- definition.setDriftHandlingMode(normal);
- definition.setInterval(2400L);
- definition.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
-
- DriftDefinitionTemplate template = templateMgr.createTemplate(getOverlord(),
resourceType.getId(), true,
- definition);
-
- // next create some definitions from the template
- final DriftDefinition attachedDef1 = createDefinition(template,
"attachedDef1", true);
- final DriftDefinition attachedDef2 = createDefinition(template,
"attachedDef2", true);
- final DriftDefinition detachedDef1 = createDefinition(template,
"detachedDef1", false);
- final DriftDefinition detachedDef2 = createDefinition(template,
"detachedDef2", false);
-
- driftMgr.updateDriftDefinition(getOverlord(), forResource(resource.getId()),
attachedDef1);
- driftMgr.updateDriftDefinition(getOverlord(), forResource(resource.getId()),
attachedDef2);
- driftMgr.updateDriftDefinition(getOverlord(), forResource(resource.getId()),
detachedDef1);
- driftMgr.updateDriftDefinition(getOverlord(), forResource(resource.getId()),
detachedDef2);
-
- // update the template
- final DriftDefinition newTemplateDef = template.getTemplateDefinition();
- newTemplateDef.setInterval(4800L);
- newTemplateDef.setDriftHandlingMode(plannedChanges);
- newTemplateDef.setEnabled(false);
-
- templateMgr.updateTemplate(getOverlord(), template);
-
- // verify that the tempalte has been updated
- final DriftDefinitionTemplate updatedTemplate =
loadTemplate(template.getName());
- AssertUtils.assertPropertiesMatch("Failed to update template",
template, updatedTemplate, "resourceType",
- "driftDefinitions", "templateDefinition");
-
- // verify that attached definitions are updated.
- for (DriftDefinition def : asList(attachedDef1, attachedDef2)) {
- DriftDefinition updatedDef = loadDefinition(def.getId());
- String msg = "Failed to propagate update to attached definition " +
toString(updatedDef) + " - ";
- DriftDefinition updatedTemplateDef =
updatedTemplate.getTemplateDefinition();
-
- assertEquals(msg + "enabled property not updated",
updatedTemplateDef.isEnabled(),
- updatedDef.isEnabled());
- assertEquals(msg + "driftHandlingMode property not updated",
- updatedTemplateDef.getDriftHandlingMode(),
updatedDef.getDriftHandlingMode());
- assertEquals(msg + "interval property not updated",
updatedTemplateDef.getInterval(),
- updatedDef.getInterval());
- }
-
- // verify that the detached definitions have not been updated.
- for (DriftDefinition def : asList(detachedDef1, detachedDef2)) {
- DriftDefinition defAfterUpdate = loadDefinition(def.getId());
- String msg = "Detached definition " + toString(def) + " should
not get updated - ";
-
- assertEquals(msg + "enabled property was modified",
def.isEnabled(), defAfterUpdate.isEnabled());
- assertEquals(msg + "driftHandlingMode property was modified",
def.getDriftHandlingMode(),
- defAfterUpdate.getDriftHandlingMode());
- assertEquals(msg + "interval property was modified",
def.getInterval(), defAfterUpdate.getInterval());
- }
- }
-
-
- @SuppressWarnings("unchecked")
- public void pinTemplate() throws Exception {
- // First create the template
- final DriftDefinition templateDef = new DriftDefinition(new Configuration());
- templateDef.setName("test::pinTemplate");
- templateDef.setEnabled(true);
- templateDef.setDriftHandlingMode(normal);
- templateDef.setInterval(2400L);
- templateDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
-
- final DriftDefinitionTemplate template =
templateMgr.createTemplate(getOverlord(),
- resourceType.getId(), true, templateDef);
-
- // next create some resource level definitions
- final DriftDefinition attachedDef1 = createDefinition(template,
"attachedDef1", true);
- final DriftDefinition attachedDef2 = createDefinition(template,
"attachedDef2", true);
- final DriftDefinition detachedDef1 = createDefinition(template,
"detachedDef1", false);
- final DriftDefinition detachedDef2 = createDefinition(template,
"detachedDef2", false);
-
- // create initial change set from which the snapshot will be generated
- final JPADriftChangeSet changeSet0 = new JPADriftChangeSet(resource, 0, COVERAGE,
attachedDef1);
-
- driftFile1 = new JPADriftFile("a1b2c3");
- drift1 = new JPADrift(changeSet0, "drift.1", FILE_ADDED, null,
driftFile1);
-
- final JPADriftSet driftSet = new JPADriftSet();
- driftSet.addDrift(drift1);
-
- // create change set v1
- driftFile2 = new JPADriftFile("1a2b3c");
- final JPADriftChangeSet changeSet1 = new JPADriftChangeSet(resource, 1, DRIFT,
attachedDef1);
- drift2 = new JPADrift(changeSet1, "drift.2", FILE_ADDED, null,
driftFile2);
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
-
- em.persist(attachedDef1);
-
- em.persist(driftFile1);
- em.persist(driftFile2);
-
- em.persist(changeSet0);
- em.persist(driftSet);
- changeSet0.setInitialDriftSet(driftSet);
- em.merge(changeSet0);
-
- em.persist(changeSet1);
- em.persist(drift2);
-
- em.persist(attachedDef2);
- em.persist(detachedDef1);
- em.persist(detachedDef2);
- }
- });
-
- // now we pin the snapshot to the template
- templateMgr.pinTemplate(getOverlord(), template.getId(), attachedDef1.getId(),
1);
-
- // verify that the template is now pinned
- DriftDefinitionTemplate updatedTemplate = loadTemplate(template.getName());
- assertTrue("Template should be marked pinned",
updatedTemplate.isPinned());
- }
-
- @Test(dependsOnMethods = "pinTemplate")
- @InitDB(false)
- public void persistChangeSetWhenTemplateGetsPinned() throws Exception {
- DriftDefinitionTemplate template = loadTemplate("test::pinTemplate");
-
- GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
- criteria.addFilterId(template.getChangeSetId());
-
- PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
- criteria);
-
- assertEquals("Expected to find change set for pinned template", 1,
changeSets.size());
-
- JPADriftChangeSet expectedChangeSet = new JPADriftChangeSet(resource, 1,
COVERAGE, null);
- List<? extends Drift> expectedDrifts = asList(
- new JPADrift(expectedChangeSet, "drift.1", FILE_ADDED, null,
driftFile1),
- new JPADrift(expectedChangeSet, drift2.getPath(), FILE_ADDED, null,
driftFile2));
-
- DriftChangeSet<?> actualChangeSet = changeSets.get(0);
- List<? extends Drift> actualDrifts = new
ArrayList(actualChangeSet.getDrifts());
-
- AssertUtils.assertCollectionMatchesNoOrder(
- "Expected to find drifts from change sets 1 and 2 in the template change
set",
- (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "newDriftFile");
-
- // we need to compare the newDriftFile properties separately because
- // assertCollectionMatchesNoOrder compares properties via equals() and
JPADriftFile
- // does not implement equals.
- assertPropertiesMatch(drift1.getNewDriftFile(), findDriftByPath(actualDrifts,
"drift.1").getNewDriftFile(),
- "The newDriftFile property was not set correctly for " + drift1);
- assertPropertiesMatch(drift2.getNewDriftFile(), findDriftByPath(actualDrifts,
"drift.2").getNewDriftFile(),
- "The newDriftFile property was not set correctly for " + drift1);
- }
-
- @Test(dependsOnMethods = "pinTemplate")
- @InitDB(false)
- public void updateAttachedDefinitionsWhenTemplateGetsPinned() throws Exception {
- DriftDefinitionTemplate template = loadTemplate("test::pinTemplate");
-
- // get the attached definitions
- List<DriftDefinition> attachedDefs = new
LinkedList<DriftDefinition>();
- for (DriftDefinition d : template.getDriftDefinitions()) {
- if (d.isAttached() && (d.getName().equals("attachedDef1")
|| d.getName().equals("attachedDef2"))) {
- attachedDefs.add(d);
- }
- }
- assertEquals("Failed to get attached definitions for " +
toString(template), 2, attachedDefs.size());
- assertDefinitionIsPinned(attachedDefs.get(0));
- assertDefinitionIsPinned(attachedDefs.get(1));
- }
-
- @Test(dependsOnMethods = "pinTemplate")
- @InitDB(false)
- public void doNotUpdateDetachedDefinitionsWhenTemplateGetsPinned() throws Exception
{
- DriftDefinitionTemplate template = loadTemplate("test::pinTemplate");
-
- // get the detached definitions
- List<DriftDefinition> detachedDefs = new
LinkedList<DriftDefinition>();
- for (DriftDefinition d : template.getDriftDefinitions()) {
- if (!d.isAttached() && (d.getName().equals("detachedDef1")
|| d.getName().equals("detachedDef2"))) {
- detachedDefs.add(d);
- }
- }
- assertEquals("Failed to get detached definitions for " +
toString(template), 2, detachedDefs.size());
- assertDefinitionIsNotPinned(detachedDefs.get(0));
- assertDefinitionIsNotPinned(detachedDefs.get(1));
- }
-
- public void deleteTemplate() throws Exception {
- // first create the template
- final DriftDefinition templateDef = new DriftDefinition(new Configuration());
- templateDef.setName("test::pinTemplate");
- templateDef.setEnabled(true);
- templateDef.setDriftHandlingMode(normal);
- templateDef.setInterval(2400L);
- templateDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
-
- final DriftDefinitionTemplate template =
templateMgr.createTemplate(getOverlord(),
- resourceType.getId(), true, templateDef);
-
- // next create some resource level definitions
- final DriftDefinition attachedDef1 = createDefinition(template,
"attachedDef1", true);
- final DriftDefinition attachedDef2 = createDefinition(template,
"attachedDef2", true);
- final DriftDefinition detachedDef1 = createDefinition(template,
"detachedDef1", false);
- final DriftDefinition detachedDef2 = createDefinition(template,
"detachedDef2", false);
-
- // create some change sets
- final JPADriftChangeSet changeSet0 = new JPADriftChangeSet(resource, 0, COVERAGE,
attachedDef1);
-
- driftFile1 = new JPADriftFile("a1b2c3");
- drift1 = new JPADrift(changeSet0, "drift.1", FILE_ADDED, null,
driftFile1);
-
- final JPADriftSet driftSet0 = new JPADriftSet();
- driftSet0.addDrift(drift1);
-
- final JPADriftChangeSet changeSet1 = new JPADriftChangeSet(resource, 0, DRIFT,
detachedDef1);
-
- driftFile2 = new JPADriftFile("1a2b3c");
- drift2 = new JPADrift(changeSet1, "drift.2", FILE_ADDED, null,
driftFile2);
-
- final JPADriftSet driftSet1 = new JPADriftSet();
- driftSet1.addDrift(drift2);
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
-
- em.persist(attachedDef1);
- em.persist(attachedDef2);
- em.persist(detachedDef1);
- em.persist(detachedDef2);
-
- em.persist(driftFile1);
- em.persist(driftFile2);
-
- em.persist(changeSet0);
- em.persist(driftSet0);
- changeSet0.setInitialDriftSet(driftSet0);
- em.merge(changeSet0);
-
- em.persist(changeSet1);
- em.persist(driftSet1);
- changeSet1.setInitialDriftSet(driftSet1);
- em.merge(changeSet1);
- }
- });
-
- // delete the template
- templateMgr.deleteTemplate(getOverlord(), template.getId());
-
- // verify that attached definitions along with their change sets have
- // been deleted
- assertNull("Change sets belonging to attached definitions should be
deleted", loadChangeSet(changeSet0.getId()));
- assertNull("Attached definition " + toString(attachedDef1) + "
should be deleted",
- loadDefinition(attachedDef1.getId()));
- assertNull("Attached definition " + toString(attachedDef2) + "
should be deleted",
- loadDefinition(attachedDef2.getId()));
-
- // verify that detached definitions along with their change sets have not been
deleted
- assertNotNull("Change sets belonging to detached definitions should not be
deleted",
- loadChangeSet(changeSet1.getId()));
- assertDetachedDefinitionNotDeleted(detachedDef1.getId());
- assertDetachedDefinitionNotDeleted(detachedDef2.getId());
-
- // verify that the template itself has been deleted
- assertNull("The template " + toString(template) + " should have
been deleted",
- loadTemplate(template.getName(), false));
- }
-
- private void assertDefinitionIsPinned(DriftDefinition definition) throws Exception {
- // verify that the definition is marked as pinned
- assertTrue("Expected " + toString(definition) + " to be
pinned", definition.isPinned());
-
- // verify that the initial change set is generated for the definition
- JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
- criteria.addFilterDriftDefinitionId(definition.getId());
- criteria.addFilterCategory(COVERAGE);
- criteria.fetchDrifts(true);
-
- PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
- criteria);
- assertEquals("Expected to find one change set", 1, changeSets.size());
-
- JPADriftChangeSet expectedChangeSet = new JPADriftChangeSet(resource, 1,
COVERAGE, null);
- List<? extends Drift> expectedDrifts = asList(
- new JPADrift(expectedChangeSet, drift1.getPath(), FILE_ADDED, null,
driftFile1),
- new JPADrift(expectedChangeSet, drift2.getPath(), FILE_ADDED, null,
driftFile2));
-
- DriftChangeSet<?> actualChangeSet = changeSets.get(0);
- List<? extends Drift> actualDrifts = new
ArrayList(actualChangeSet.getDrifts());
-
- AssertUtils.assertCollectionMatchesNoOrder(
- "Expected to find drifts from change sets 1 and 2 in the template change
set",
- (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "newDriftFile");
-
- // Finally make sure that there are no other change sets
- criteria = new JPADriftChangeSetCriteria();
- criteria.addFilterStartVersion(1);
- criteria.addFilterDriftDefinitionId(definition.getId());
-
- assertEquals("There should not be any drift change sets", 0,
- driftMgr.findDriftChangeSetsByCriteria(getOverlord(), criteria).size());
- }
-
- private void assertDefinitionIsNotPinned(DriftDefinition definition) throws Exception
{
- // verify that the definition is not pinned
- assertFalse("Expected " + toString(definition) + " to be
unpinned", definition.isPinned());
-
- // Note that this method assumes that the definition has no change sets
- // associated with it and therefore checks that there are no change sets.
- JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
- criteria.addFilterDriftDefinitionId(definition.getId());
-
- PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
- criteria);
- assertEquals("Did not expect to find any change sets for " +
toString(definition) + ". Note that this " +
- "assertion method assumes that the definition you are testing is not
supposed to have any change sets.",
- 0, changeSets.size());
- }
-
- private void assertDriftTemplateEquals(String msg, DriftDefinitionTemplate expected,
DriftDefinitionTemplate actual) {
- AssertUtils
- .assertPropertiesMatch(msg + ": basic drift definition template
properties do not match", expected, actual,
- "id", "resourceType", "ctime",
"templateDefinition");
- assertDriftDefEquals(msg + ": template definitions do not match",
expected.getTemplateDefinition(), actual
- .getTemplateDefinition());
- }
-
- private void assertDriftDefEquals(String msg, DriftDefinition expected,
DriftDefinition actual) {
- DriftDefinitionComparator comparator = new DriftDefinitionComparator(
- BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS);
- assertEquals(msg, 0, comparator.compare(expected, actual));
- }
-
- private void assertDetachedDefinitionNotDeleted(int definitionId) {
- DriftDefinition definition = loadDefinition(definitionId);
- assertNotNull("Detached definition " + toString(definition) + "
should not be deleted", definition);
- assertNull("The detached definition's template reference should be set
to null when the template is deleted",
- definition.getTemplate());
- }
-
- private DriftDefinition createDefinition(DriftDefinitionTemplate template, String
defName, boolean isAttached) {
- DriftDefinition def = template.createDefinition();
- def.setName(defName);
- def.setAttached(isAttached);
- def.setTemplate(template);
- def.setResource(resource);
- return def;
- }
-
- private DriftDefinitionTemplate loadTemplate(String name) {
- return loadTemplate(name, true);
- }
-
- private DriftDefinitionTemplate loadTemplate(String name, boolean
verifyResultsUnique) {
- DriftDefinitionTemplateCriteria criteria = new
DriftDefinitionTemplateCriteria();
- criteria.addFilterResourceTypeId(resourceType.getId());
- criteria.addFilterName(name);
- criteria.fetchDriftDefinitions(true);
-
- PageList<DriftDefinitionTemplate> templates =
templateMgr.findTemplatesByCriteria(getOverlord(), criteria);
- if (verifyResultsUnique) {
- assertEquals("Expected to find one template", 1,
templates.size());
- }
-
- if (templates.isEmpty()) {
- return null;
- }
- return templates.get(0);
- }
-
- private DriftDefinition loadDefinition(int definitionId) {
- DriftDefinitionCriteria criteria = new DriftDefinitionCriteria();
- criteria.addFilterId(definitionId);
- criteria.fetchConfiguration(true);
- criteria.fetchTemplate(true);
- PageList<DriftDefinition> definitions =
driftMgr.findDriftDefinitionsByCriteria(getOverlord(), criteria);
-
- if (definitions.isEmpty()) {
- return null;
- }
- return definitions.get(0);
- }
-
- private DriftChangeSet<?> loadChangeSet(String id) throws Exception {
- GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
- criteria.addFilterId(id);
- PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
- criteria);
-
- if (changeSets.isEmpty()) {
- return null;
- }
- return changeSets.get(0);
- }
-
-}
diff --git
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/InitDB.java
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/InitDB.java
deleted file mode 100644
index 65a6523..0000000
---
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/InitDB.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2011 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.drift;
-
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-@Retention(RUNTIME)
-(a)Target({ElementType.METHOD })
-public @interface InitDB {
- boolean value() default true;
-}
diff --git
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
deleted file mode 100644
index 4faca1b..0000000
---
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2011 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.drift;
-
-import static java.util.Arrays.asList;
-import static org.apache.commons.io.IOUtils.toInputStream;
-import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
-import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.normal;
-import static org.rhq.core.domain.drift.DriftFileStatus.LOADED;
-import static org.rhq.enterprise.server.util.LookupUtil.getJPADriftServer;
-import static org.rhq.test.AssertUtils.assertPropertiesMatch;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import javax.persistence.EntityManager;
-
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-
-import org.rhq.core.domain.configuration.Configuration;
-import org.rhq.core.domain.criteria.JPADriftChangeSetCriteria;
-import org.rhq.core.domain.drift.Drift;
-import org.rhq.core.domain.drift.DriftDefinition;
-import org.rhq.core.domain.drift.JPADrift;
-import org.rhq.core.domain.drift.JPADriftChangeSet;
-import org.rhq.core.domain.drift.JPADriftFile;
-import org.rhq.core.domain.drift.JPADriftSet;
-import org.rhq.core.domain.drift.dto.DriftChangeSetDTO;
-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;
-
-public class JPADriftServerBeanTest extends DriftServerTest {
-
- private JPADriftServerLocal jpaDriftServer;
-
- private final String DRIFT_FILE_1_ID = "a1b2c3d4";
-
- private final String DRIFT_FILE_2_ID = "1ab2b3c4d";
-
- private JPADriftFile driftFile1;
-
- private JPADriftFile driftFile2;
-
- @BeforeClass
- public void initTests() {
- jpaDriftServer = getJPADriftServer();
- }
-
- @BeforeMethod
- public void persistDriftFiles() throws Exception {
- driftFile1 = jpaDriftServer.persistDriftFile(new JPADriftFile(DRIFT_FILE_1_ID));
- driftFile2 = jpaDriftServer.persistDriftFile(new JPADriftFile(DRIFT_FILE_2_ID));
-
- String driftFile1Content = "drift file 1 content...";
- String driftFile2Content = "drift file 2 content...";
-
- jpaDriftServer.persistDriftFileData(driftFile1, toInputStream(driftFile1Content),
driftFile1Content.length());
- jpaDriftServer.persistDriftFileData(driftFile2, toInputStream(driftFile2Content),
driftFile2Content.length());
-
- driftFile1 = jpaDriftServer.getDriftFile(getOverlord(), DRIFT_FILE_1_ID);
- driftFile2 = jpaDriftServer.getDriftFile(getOverlord(), DRIFT_FILE_2_ID);
-
- assertDriftFilePersisted(driftFile1, "driftFile1", driftFile1Content);
- assertDriftFilePersisted(driftFile2, "driftFile2", driftFile2Content);
- }
-
- public void persistResourceChangeSet() {
- // first create and persist the drift definition
- final DriftDefinition driftDef = new DriftDefinition(new Configuration());
- driftDef.setName("test::persistResourceChangeSet");
- driftDef.setEnabled(true);
- driftDef.setDriftHandlingMode(normal);
- driftDef.setInterval(2400L);
- driftDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
- driftDef.setResource(resource);
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
- em.persist(driftDef);
- }
- });
-
- // create the change set to be persisted
- DriftChangeSetDTO changeSet = new DriftChangeSetDTO();
- changeSet.setCategory(COVERAGE);
- changeSet.setVersion(1);
- changeSet.setDriftDefinitionId(driftDef.getId());
- changeSet.setResourceId(resource.getId());
- changeSet.setDriftHandlingMode(normal);
- changeSet.setCtime(System.currentTimeMillis());
-
- DriftDTO drift1 = new DriftDTO();
- drift1.setCategory(FILE_ADDED);
- drift1.setPath("drift.1");
- drift1.setChangeSet(changeSet);
- drift1.setCtime(System.currentTimeMillis());
- drift1.setNewDriftFile(toDTo(driftFile1));
-
- DriftDTO drift2 = new DriftDTO();
- drift2.setCategory(FILE_ADDED);
- drift2.setPath("drift.2");
- drift2.setChangeSet(changeSet);
- drift2.setCtime(System.currentTimeMillis());
- drift2.setNewDriftFile(toDTo(driftFile2));
-
- Set<DriftDTO> drifts = new HashSet<DriftDTO>();
- drifts.add(drift1);
- drifts.add(drift2);
- changeSet.setDrifts(drifts);
-
- String newChangeSetId = jpaDriftServer.persistChangeSet(getOverlord(),
changeSet);
-
- // verify that the change set was persisted
- JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
- criteria.addFilterId(newChangeSetId);
- criteria.fetchDrifts(true);
-
- PageList<JPADriftChangeSet> changeSets =
jpaDriftServer.findDriftChangeSetsByCriteria(getOverlord(), criteria);
- assertEquals("Expected to find one change set", 1, changeSets.size());
-
- JPADriftChangeSet jpaChangeSet = changeSets.get(0);
- assertEquals("Expected change set to contain two drifts. This could be a
result of the change set not being " +
- "persisted correctly or the criteria fetch being done
incorrectly.", 2, jpaChangeSet.getDrifts().size());
-
- AssertUtils
- .assertPropertiesMatch("The change set was not persisted correctly",
changeSet, jpaChangeSet, "id", "drifts",
- "class", "ctime");
-
- List<? extends Drift> expectedDrifts = asList(drift1, drift2);
- List<? extends Drift> actualDrifts = new
ArrayList(jpaChangeSet.getDrifts());
-
- // We ignore the id and ctime properties because those are set by
JPADriftServerBean
- // and are somewhat implmentation specific. We ignore the directory property
because
- // it is really a calculated property. newDriftFile has to be compared
separately
- // since it does not implement equals.
- AssertUtils.assertCollectionMatchesNoOrder("The change set drifts were not
persisted correctly",
- (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "directory",
- "newDriftFile", "class");
-
- assertPropertiesMatch("The newDriftFile property was not set correctly for
" + drift1, drift1.getNewDriftFile(),
- findDriftByPath(actualDrifts, "drift.1").getNewDriftFile(),
"class", "ctime") ;
- assertPropertiesMatch("The newDriftFile property was not set correctly for
" + drift2, drift2.getNewDriftFile(),
- findDriftByPath(actualDrifts, "drift.2").getNewDriftFile(),
"class", "ctime") ;
- }
-
- public void persistTemplateChangeSet() {
- // create the change set to be persisted
- //
- // Note that we do not set the drift definition id or resource id since
- // the change set is not owned by a resource. It is owned by the
- // resource type.
- DriftChangeSetDTO changeSet = new DriftChangeSetDTO();
- changeSet.setCategory(COVERAGE);
- changeSet.setVersion(1);
- changeSet.setDriftHandlingMode(normal);
- changeSet.setCtime(System.currentTimeMillis());
-
- DriftDTO drift1 = new DriftDTO();
- drift1.setCategory(FILE_ADDED);
- drift1.setPath("drift.1");
- drift1.setChangeSet(changeSet);
- drift1.setCtime(System.currentTimeMillis());
- drift1.setNewDriftFile(toDTo(driftFile1));
-
- DriftDTO drift2 = new DriftDTO();
- drift2.setCategory(FILE_ADDED);
- drift2.setPath("drift.2");
- drift2.setChangeSet(changeSet);
- drift2.setCtime(System.currentTimeMillis());
- drift2.setNewDriftFile(toDTo(driftFile2));
-
- Set<DriftDTO> drifts = new HashSet<DriftDTO>();
- drifts.add(drift1);
- drifts.add(drift2);
- changeSet.setDrifts(drifts);
-
- String newChangeSetId = jpaDriftServer.persistChangeSet(getOverlord(),
changeSet);
-
- // verify that the change set was persisted
- JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
- criteria.addFilterId(newChangeSetId);
- criteria.fetchDrifts(true);
-
- PageList<JPADriftChangeSet> changeSets =
jpaDriftServer.findDriftChangeSetsByCriteria(getOverlord(), criteria);
- assertEquals("Expected to find one change set", 1, changeSets.size());
-
- JPADriftChangeSet jpaChangeSet = changeSets.get(0);
- assertEquals("Expected change set to contain two drifts. This could be a
result of the change set not being " +
- "persisted correctly or the criteria fetch being done
incorrectly.", 2, jpaChangeSet.getDrifts().size());
-
- AssertUtils
- .assertPropertiesMatch("The change set was not persisted correctly",
changeSet, jpaChangeSet, "id", "drifts",
- "class", "ctime");
-
- List<? extends Drift> expectedDrifts = asList(drift1, drift2);
- List<? extends Drift> actualDrifts = new
ArrayList(jpaChangeSet.getDrifts());
-
- // We ignore the id and ctime properties because those are set by
JPADriftServerBean
- // and are somewhat implmentation specific. We ignore the directory property
because
- // it is really a calculated property. newDriftFile has to be compared
separately
- // since it does not implement equals.
- AssertUtils.assertCollectionMatchesNoOrder("The change set drifts were not
persisted correctly",
- (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "directory",
- "newDriftFile", "class");
-
- assertPropertiesMatch("The newDriftFile property was not set correctly for
" + drift1, drift1.getNewDriftFile(),
- findDriftByPath(actualDrifts, "drift.1").getNewDriftFile(),
"class", "ctime") ;
- assertPropertiesMatch("The newDriftFile property was not set correctly for
" + drift2, drift2.getNewDriftFile(),
- findDriftByPath(actualDrifts, "drift.2").getNewDriftFile(),
"class", "ctime") ;
- }
-
- public void copyChangeSet() {
- // first create the change set that will be copied
- final JPADriftChangeSet changeSet = new JPADriftChangeSet(null, 0, COVERAGE,
null);
- changeSet.setDriftHandlingMode(normal);
-
- final JPADrift drift1 = new JPADrift(changeSet, "drift.1", FILE_ADDED,
null, driftFile1);
- final JPADrift drift2 = new JPADrift(changeSet, "drift.2", FILE_ADDED,
null, driftFile2);
-
- final JPADriftSet driftSet = new JPADriftSet();
- driftSet.addDrift(drift1);
- driftSet.addDrift(drift2);
-
- // next create the drift definition
- final DriftDefinition driftDef = new DriftDefinition(new Configuration());
- driftDef.setName("test::copyChangeSet");
- driftDef.setEnabled(true);
- driftDef.setDriftHandlingMode(normal);
- driftDef.setInterval(2400L);
- driftDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
- driftDef.setResource(resource);
-
- // persist the change set and drift definition
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
- em.persist(changeSet);
- em.persist(driftDef);
- em.persist(driftSet);
- changeSet.setInitialDriftSet(driftSet);
- em.merge(changeSet);
- }
- });
-
- jpaDriftServer.copyChangeSet(getOverlord(), changeSet.getId(), driftDef.getId(),
resource.getId());
-
- // verify that the change set was created for the definition
- JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
- criteria.addFilterDriftDefinitionId(driftDef.getId());
- criteria.addFilterCategory(COVERAGE);
-
- PageList<JPADriftChangeSet> changeSets =
jpaDriftServer.findDriftChangeSetsByCriteria(getOverlord(), criteria);
-
- assertEquals("Expected to get back one change set",
1,changeSets.size());
-
- JPADriftChangeSet newChangeSet = changeSets.get(0);
- Set<JPADrift> expectedDrifts = new HashSet<JPADrift>(asList(drift1,
drift2));
- Set<JPADrift> actualDrifts = newChangeSet.getDrifts();
-
- AssertUtils.assertCollectionMatchesNoOrder("The change set drifts were not
copied correctly", expectedDrifts,
- actualDrifts,
- "changeSet", "newDriftFile");
- }
-
- private DriftFileDTO toDTo(JPADriftFile driftFile) {
- DriftFileDTO dto = new DriftFileDTO();
- dto.setHashId(driftFile.getHashId());
- dto.setDataSize(driftFile.getDataSize());
- dto.setStatus(driftFile.getStatus());
- return dto;
- }
-
-
- private void assertDriftFilePersisted(JPADriftFile driftFile, String name, String
content) {
- assertNotNull("Failed to get " + name + " Was it persisted?",
driftFile);
- assertEquals("The content for " + name + " is wrong",
content, jpaDriftServer.getDriftFileBits(
- driftFile.getHashId()));
- assertEquals("The drift file status is wrong", LOADED,
driftFile.getStatus());
- }
-
-}
diff --git
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
deleted file mode 100644
index 66afcb0..0000000
---
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2011 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.drift;
-
-import static java.util.Arrays.asList;
-import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
-import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.normal;
-import static
org.rhq.core.domain.drift.DriftDefinitionComparator.CompareMode.BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS;
-import static org.rhq.enterprise.server.util.LookupUtil.getDriftManager;
-import static org.rhq.enterprise.server.util.LookupUtil.getDriftTemplateManager;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import javax.persistence.EntityManager;
-
-import org.testng.annotations.BeforeClass;
-
-import org.rhq.core.domain.common.EntityContext;
-import org.rhq.core.domain.configuration.Configuration;
-import org.rhq.core.domain.criteria.DriftDefinitionCriteria;
-import org.rhq.core.domain.criteria.JPADriftChangeSetCriteria;
-import org.rhq.core.domain.drift.Drift;
-import org.rhq.core.domain.drift.DriftChangeSet;
-import org.rhq.core.domain.drift.DriftConfigurationDefinition;
-import org.rhq.core.domain.drift.DriftDefinition;
-import org.rhq.core.domain.drift.DriftDefinitionComparator;
-import org.rhq.core.domain.drift.DriftDefinitionTemplate;
-import org.rhq.core.domain.drift.DriftSnapshot;
-import org.rhq.core.domain.drift.JPADrift;
-import org.rhq.core.domain.drift.JPADriftChangeSet;
-import org.rhq.core.domain.drift.JPADriftFile;
-import org.rhq.core.domain.drift.JPADriftSet;
-import org.rhq.core.domain.util.PageList;
-import org.rhq.enterprise.server.safeinvoker.HibernateDetachUtility;
-import org.rhq.test.AssertUtils;
-import org.rhq.test.TransactionCallback;
-
-public class ManageDriftDefinitionsTest extends DriftServerTest {
-
- private DriftManagerLocal driftMgr;
-
- private DriftTemplateManagerLocal templateMgr;
-
- @BeforeClass
- public void initClass() throws Exception {
- driftMgr = getDriftManager();
- templateMgr = getDriftTemplateManager();
- }
-
- public void createDefinitionFromUnpinnedTemplate() {
- // first create a template
- final DriftDefinition templateDef = new DriftDefinition(new Configuration());
- templateDef.setName("test_createUnpinnedDefinition");
- templateDef.setEnabled(true);
- templateDef.setDriftHandlingMode(normal);
- templateDef.setInterval(2400L);
- templateDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
-
- // persist the template
- DriftDefinitionTemplate template = templateMgr.createTemplate(getOverlord(),
resourceType.getId(), false,
- templateDef);
-
- // create and persist the definition
- DriftDefinition definition = template.createDefinition();
- definition.setTemplate(template);
- driftMgr.updateDriftDefinition(getOverlord(),
EntityContext.forResource(resource.getId()), definition);
-
- // verify that the definition was created
- DriftDefinition newDef = loadDefinition(definition.getName());
- DriftDefinitionComparator comparator = new DriftDefinitionComparator(
- BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS);
-
- assertEquals("The drift definition was not persisted correctly", 0,
comparator.compare(definition, newDef));
- assertEquals("The template association was not set on the definition",
template, newDef.getTemplate());
- }
-
- @SuppressWarnings("unchecked")
- public void createDefinitionFromPinnedTemplate() throws Exception {
- // We first need to create a pinned template. Users can only create a pinned
- // template from a snapshot of an existing resource-level drift definition.
- // We are going to take a bit of a short cut though by directly creating
- // and persisting the pinned change set.
-
- // first create the change set
- final JPADriftChangeSet changeSet0 = new JPADriftChangeSet(null, 0, COVERAGE,
null);
-
changeSet0.setDriftHandlingMode(DriftConfigurationDefinition.DriftHandlingMode.normal);
-
- final JPADriftFile driftFile1 = new JPADriftFile("a1b2c3");
- final JPADriftFile driftFile2 = new JPADriftFile("1a2b3c");
-
- JPADrift drift1 = new JPADrift(changeSet0, "drift.1", FILE_ADDED, null,
driftFile1);
- JPADrift drift2 = new JPADrift(changeSet0, "drift.2", FILE_ADDED, null,
driftFile2);
-
- final JPADriftSet driftSet = new JPADriftSet();
- driftSet.addDrift(drift1);
- driftSet.addDrift(drift2);
-
- // create the template
- final DriftDefinition templateDef = new DriftDefinition(new Configuration());
- templateDef.setName("test_createUnpinnedDefinition");
- templateDef.setEnabled(true);
- templateDef.setDriftHandlingMode(normal);
- templateDef.setInterval(2400L);
- templateDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
- templateDef.setPinned(true);
-
- final DriftDefinitionTemplate template =
templateMgr.createTemplate(getOverlord(), resourceType.getId(), true,
- templateDef);
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
-
- em.persist(driftFile1);
- em.persist(driftFile2);
- em.persist(changeSet0);
- em.persist(driftSet);
- changeSet0.setInitialDriftSet(driftSet);
- em.merge(changeSet0);
-
- // setting the change set id on the template is the last and the
- // most important step in making the template pinned
- template.setChangeSetId(changeSet0.getId());
- em.merge(template);
- }
- });
-
- // Create and persist a resource-level definition.
- final DriftDefinition definition = template.createDefinition();
- definition.setTemplate(template);
-
- final AtomicBoolean agentInvoked = new AtomicBoolean(false);
-
- agentServiceContainer.driftService = new TestDefService() {
- @Override
- public void updateDriftDetection(int resourceId, DriftDefinition driftDef,
DriftSnapshot snapshot) {
- try {
- HibernateDetachUtility.nullOutUninitializedFields(driftDef,
- HibernateDetachUtility.SerializationType.SERIALIZATION);
- HibernateDetachUtility.nullOutUninitializedFields(snapshot,
- HibernateDetachUtility.SerializationType.SERIALIZATION);
- agentInvoked.set(true);
- assertNotNull("Expected snapshot drift instances collection to
be non-null",
- snapshot.getDriftInstances());
- assertEquals("Expected snapshot to contain two drift
entries", 2, snapshot.getDriftInstances().size());
- } catch (Exception e) {
- String msg = "Do not pass attached entites to agent since those
entities are outside of " +
- "Hibernate's control. The persistence context should be
flushed and cleared to ensure that " +
- "only detached objects are sent to the agent";
- throw new RuntimeException(msg, e);
- }
- }
- };
-
- driftMgr.updateDriftDefinition(getOverlord(),
EntityContext.forResource(resource.getId()), definition);
-
- DriftDefinition newDef = loadDefinition(definition.getName());
-
- // verify that the definition is marked as pinned
- assertTrue("The drift definition should be marked as pinned",
newDef.isPinned());
-
- // verify that the initial change set is generated for the definition
- JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
- criteria.addFilterDriftDefinitionId(definition.getId());
- criteria.addFilterCategory(COVERAGE);
- criteria.fetchDrifts(true);
-
- PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
- criteria);
- assertEquals("Expected to find one change set", 1, changeSets.size());
-
- JPADriftChangeSet expectedChangeSet = new JPADriftChangeSet(resource, 1,
COVERAGE, null);
- List<? extends Drift> expectedDrifts = asList(
- new JPADrift(expectedChangeSet, drift1.getPath(), FILE_ADDED, null,
driftFile1),
- new JPADrift(expectedChangeSet, drift2.getPath(), FILE_ADDED, null,
driftFile2));
-
- DriftChangeSet<?> actualChangeSet = changeSets.get(0);
- List<? extends Drift> actualDrifts = new
ArrayList(actualChangeSet.getDrifts());
-
- AssertUtils.assertCollectionMatchesNoOrder(
- "Expected to find drifts from change sets 1 and 2 in the template change
set",
- (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "newDriftFile");
-
- // lastly verify that the agent is called
- assertTrue("Failed to send drift definition along with snapshot to
agent", agentInvoked.get());
- }
-
- private DriftDefinition loadDefinition(String name) {
- DriftDefinitionCriteria criteria = new DriftDefinitionCriteria();
- criteria.addFilterResourceIds(resource.getId());
- criteria.addFilterName(name);
- criteria.fetchConfiguration(true);
- criteria.fetchResource(true);
- criteria.fetchTemplate(true);
-
- PageList<DriftDefinition> driftDefs =
driftMgr.findDriftDefinitionsByCriteria(getOverlord(), criteria);
- assertEquals("Expected to find one drift definition", 1,
driftDefs.size());
-
- return driftDefs.get(0);
- }
-}
diff --git
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
deleted file mode 100644
index e7341e4..0000000
---
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2011 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.drift;
-
-import static java.util.Arrays.asList;
-import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
-import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
-import static org.rhq.core.domain.drift.DriftChangeSetCategory.DRIFT;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.normal;
-import static org.rhq.enterprise.server.util.LookupUtil.getDriftManager;
-import static org.rhq.enterprise.server.util.LookupUtil.getDriftTemplateManager;
-import static org.rhq.test.AssertUtils.assertPropertiesMatch;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import javax.persistence.EntityManager;
-
-import org.testng.annotations.BeforeClass;
-
-import org.rhq.core.domain.configuration.Configuration;
-import org.rhq.core.domain.criteria.GenericDriftChangeSetCriteria;
-import org.rhq.core.domain.drift.Drift;
-import org.rhq.core.domain.drift.DriftChangeSet;
-import org.rhq.core.domain.drift.DriftDefinition;
-import org.rhq.core.domain.drift.DriftSnapshot;
-import org.rhq.core.domain.drift.JPADrift;
-import org.rhq.core.domain.drift.JPADriftChangeSet;
-import org.rhq.core.domain.drift.JPADriftFile;
-import org.rhq.core.domain.drift.JPADriftSet;
-import org.rhq.core.domain.util.PageList;
-import org.rhq.core.server.EntitySerializer;
-import org.rhq.test.AssertUtils;
-import org.rhq.test.TransactionCallback;
-
-public class ManageSnapshotsTest extends DriftServerTest {
-
- private DriftManagerLocal driftMgr;
-
- private DriftTemplateManagerLocal templateMgr;
-
- @BeforeClass(inheritGroups = true)
- public void initClass() throws Exception {
- driftMgr = getDriftManager();
- templateMgr = getDriftTemplateManager();
- }
-
- public void pinningSnapshotShouldSetDriftDefAsPinned() {
- final DriftDefinition driftDef =
createAndPersistDriftDef("test::setPinnedFlag");
-
- // create initial change set
- final JPADriftChangeSet changeSet = new JPADriftChangeSet(resource, 0, COVERAGE,
driftDef);
-
- final JPADriftFile driftFile1 = new JPADriftFile("a1b2c3");
- JPADrift drift = new JPADrift(changeSet, "drift.1", FILE_ADDED, null,
driftFile1);
-
- final JPADriftSet driftSet = new JPADriftSet();
- driftSet.addDrift(drift);
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
- em.persist(driftFile1);
- em.persist(changeSet);
- em.persist(driftSet);
- changeSet.setInitialDriftSet(driftSet);
- em.merge(changeSet);
- }
- });
-
- driftMgr.pinSnapshot(getOverlord(), driftDef.getId(), 0);
- DriftDefinition updatedDriftDef = driftMgr.getDriftDefinition(getOverlord(),
driftDef.getId());
-
- assertNotNull("Failed to get " + toString(driftDef), updatedDriftDef);
- assertTrue("Failed to set pinned flag of " + toString(driftDef),
updatedDriftDef.isPinned());
- }
-
- @SuppressWarnings("unchecked")
- public void pinningSnapshotShouldMakeSnapshotTheInitialChangeSet() throws Exception
{
- final DriftDefinition driftDef =
createAndPersistDriftDef("test::makeSnapshotVersionZero");
-
- // create initial change set
- final JPADriftChangeSet changeSet0 = new JPADriftChangeSet(resource, 0, COVERAGE,
driftDef);
-
- final JPADriftFile driftFile1 = new JPADriftFile("a1b2c3");
- JPADrift drift1 = new JPADrift(changeSet0, "drift.1", FILE_ADDED, null,
driftFile1);
-
- final JPADriftSet driftSet = new JPADriftSet();
- driftSet.addDrift(drift1);
-
- // create change set v1
- final JPADriftFile driftFile2 = new JPADriftFile("1a2b3c");
- final JPADriftChangeSet changeSet1 = new JPADriftChangeSet(resource, 1, DRIFT,
driftDef);
- final JPADrift drift2 = new JPADrift(changeSet1, "drift.2", FILE_ADDED,
null, driftFile2);
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
- em.persist(driftFile1);
- em.persist(driftFile2);
- em.persist(changeSet0);
- em.persist(driftSet);
- changeSet0.setInitialDriftSet(driftSet);
- em.merge(changeSet0);
- em.persist(changeSet1);
- em.persist(drift2);
- }
- });
-
- driftMgr.pinSnapshot(getOverlord(), driftDef.getId(), 1);
-
- // Verify that there is now only one change set for the drift def
- GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
- criteria.addFilterDriftDefinitionId(driftDef.getId());
-
- PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
- criteria);
- assertEquals("All change sets except the change set representing the pinned
snapshot should be removed",
- 1, changeSets.size());
- DriftChangeSet<?> changeSet = changeSets.get(0);
-
- assertEquals("The pinned snapshot version should be reset to zero", 0,
changeSet.getVersion());
- assertEquals("The change set category is wrong", COVERAGE,
changeSet.getCategory());
-
- JPADriftChangeSet expectedChangeSet = new JPADriftChangeSet(resource, 1,
COVERAGE, driftDef);
- List<? extends Drift> expectedDrifts = asList(
- new JPADrift(expectedChangeSet, drift1.getPath(), FILE_ADDED, null,
driftFile1),
- new JPADrift(expectedChangeSet, drift2.getPath(), FILE_ADDED, null,
driftFile2));
-
- List<? extends Drift> actualDrifts = new ArrayList(changeSet.getDrifts());
-
- AssertUtils.assertCollectionMatchesNoOrder(
- "Expected to find drifts from change sets 1 and 2 in the new initial
change set",
- (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "newDriftFile");
-
- // we need to compare the newDriftFile properties separately because
- // assertCollectionMatchesNoOrder compares properties via equals() and
JPADriftFile
- // does not implement equals.
- assertPropertiesMatch(drift1.getNewDriftFile(), findDriftByPath(actualDrifts,
"drift.1").getNewDriftFile(),
- "The newDriftFile property was not set correctly for " + drift1);
- assertPropertiesMatch(drift2.getNewDriftFile(), findDriftByPath(actualDrifts,
"drift.2").getNewDriftFile(),
- "The newDriftFile property was not set correctly for " + drift1);
- }
-
- public void pinningSnapshotShouldSendRequestToAgent() {
- final DriftDefinition driftDef =
createAndPersistDriftDef("test::setPinnedFlag");
-
- // create initial change set
- final JPADriftChangeSet changeSet = new JPADriftChangeSet(resource, 0, COVERAGE,
driftDef);
-
- final JPADriftFile driftFile1 = new JPADriftFile("a1b2c3");
- JPADrift drift = new JPADrift(changeSet, "drift.1", FILE_ADDED, null,
driftFile1);
-
- final JPADriftSet driftSet = new JPADriftSet();
- driftSet.addDrift(drift);
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
- em.persist(driftFile1);
- em.persist(changeSet);
- em.persist(driftSet);
- changeSet.setInitialDriftSet(driftSet);
- em.merge(changeSet);
- }
- });
-
- final AtomicBoolean agentInvoked = new AtomicBoolean(false);
- agentServiceContainer.driftService = new TestDefService() {
- @Override
- public void pinSnapshot(int resourceId, String configName, DriftSnapshot
snapshot) {
- try {
- agentInvoked.set(true);
- // serialize the method arguments here to more closely simulate what
- // happens during the call. We cannot send hibernate-proxied objects
- // to the agent. This is an attempt to catch that.
- ObjectOutputStream stream = new ObjectOutputStream(new
ByteArrayOutputStream());
- EntitySerializer.writeExternalRemote(resourceId, stream);
- EntitySerializer.writeExternalRemote(configName, stream);
- EntitySerializer.writeExternalRemote(snapshot, stream);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
- };
-
- driftMgr.pinSnapshot(getOverlord(), driftDef.getId(), 0);
-
- assertTrue("Failed to send request to agent to pin snapshot",
agentInvoked.get());
- }
-
- private DriftDefinition createAndPersistDriftDef(String name) {
- final DriftDefinition driftDef = new DriftDefinition(new Configuration());
- driftDef.setName(name);
- driftDef.setEnabled(true);
- driftDef.setDriftHandlingMode(normal);
- driftDef.setInterval(1800L);
- driftDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- driftDef.setResource(resource);
- getEntityManager().persist(driftDef);
- }
- });
-
- return driftDef;
- }
-
-}
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/META-INF/ejb-jar.xml
b/modules/enterprise/server/integration-tests/src/test/resources/META-INF/ejb-jar.xml
deleted file mode 100644
index 8222948..0000000
--- a/modules/enterprise/server/integration-tests/src/test/resources/META-INF/ejb-jar.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ejb-jar
xmlns="http://java.sun.com/xml/ns/javaee"
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
- version="3.0">
-
- <description>RHQ</description>
- <display-name>RHQ</display-name>
-
- <assembly-descriptor>
-
- <!-- all our EJB3 SLSBs can define custom @RequiredPermissions annotations for
authorization checks-->
- <interceptor-binding>
- <ejb-name>*</ejb-name>
-
<interceptor-class>org.rhq.enterprise.server.authz.RequiredPermissionsInterceptor</interceptor-class>
- </interceptor-binding>
- <interceptor-binding>
- <ejb-name>*</ejb-name>
-
<interceptor-class>org.rhq.enterprise.server.common.TransactionInterruptInterceptor</interceptor-class>
- </interceptor-binding>
- <interceptor-binding>
- <ejb-name>*</ejb-name>
-
<interceptor-class>org.rhq.enterprise.server.common.PerformanceMonitorInterceptor</interceptor-class>
- </interceptor-binding>
-
- </assembly-descriptor>
-
-</ejb-jar>
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/binary-blob-sample.jar
b/modules/enterprise/server/integration-tests/src/test/resources/binary-blob-sample.jar
deleted file mode 100644
index 0a629ec..0000000
Binary files
a/modules/enterprise/server/integration-tests/src/test/resources/binary-blob-sample.jar
and /dev/null differ
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/default.persistence.properties
b/modules/enterprise/server/integration-tests/src/test/resources/default.persistence.properties
deleted file mode 100644
index 8e4f317..0000000
---
a/modules/enterprise/server/integration-tests/src/test/resources/default.persistence.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup
-#hibernate.connection.release_mode=after_statement
-#hibernate.transaction.flush_before_completion=false
-#hibernate.transaction.auto_close_session=false
-#hibernate.query.factory_class=org.hibernate.hql.ast.ASTQueryTranslatorFactory
-#hibernate.hbm2ddl.auto=create-drop
-#hibernate.hbm2ddl.auto=create
-hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
-# Clustered cache with TreeCache
-#hibernate.cache.provider_class=org.jboss.ejb3.entity.TreeCacheProviderHook
-#hibernate.treecache.mbean.object_name=jboss.cache:service=EJB3EntityTreeCache
-#hibernate.dialect=org.hibernate.dialect.HSQLDialect
-hibernate.jndi.java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
-hibernate.jndi.java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
-hibernate.bytecode.use_reflection_optimizer=false
-# I don't think this is honored, but EJB3Deployer uses it
-hibernate.bytecode.provider=javassist
-hibernate.jdbc.use_streams_for_binary=true
-hibernate.show_sql=false
-hibernate.format_sql=true
-hibernate.default_batch_fetch_size=16
-hibernate.jdbc.batch_size=20
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/ejb3-interceptors-aop.xml
b/modules/enterprise/server/integration-tests/src/test/resources/ejb3-interceptors-aop.xml
deleted file mode 100644
index f30aa70..0000000
---
a/modules/enterprise/server/integration-tests/src/test/resources/ejb3-interceptors-aop.xml
+++ /dev/null
@@ -1,360 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE aop PUBLIC
- "-//JBoss//DTD JBOSS AOP 1.0//EN"
- "http://www.jboss.org/aop/dtd/jboss-aop_1_0.dtd">
-
-<aop>
- <interceptor class="org.jboss.aspects.remoting.InvokeRemoteInterceptor"
scope="PER_VM"/>
- <interceptor class="org.jboss.aspects.security.SecurityClientInterceptor"
scope="PER_VM"/>
- <interceptor class="org.jboss.aspects.tx.ClientTxPropagationInterceptor"
scope="PER_VM"/>
- <interceptor class="org.jboss.ejb3.remoting.IsLocalInterceptor"
scope="PER_VM"/>
- <interceptor class="org.jboss.aspects.remoting.ClusterChooserInterceptor"
scope="PER_VM"/>
-
- <interceptor class="org.jboss.aspects.tx.TxPropagationInterceptor"
scope="PER_VM"/>
-
- <stack name="ServiceClientInterceptors">
- <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
- </stack>
-
- <stack name="AsynchronousStatelessSessionClientInterceptors">
- <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
- </stack>
-
- <stack name="AsynchronousStatefulSessionClientInterceptors">
- <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
- </stack>
-
- <stack name="StatelessSessionClientInterceptors">
- <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
- </stack>
-
- <stack name="StatefulSessionClientInterceptors">
- <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
- </stack>
-
- <stack name="ClusteredStatelessSessionClientInterceptors">
- <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.remoting.ClusterChooserInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
- </stack>
-
- <stack name="ClusteredStatefulSessionClientInterceptors">
- <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.remoting.ClusterChooserInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
- </stack>
-
- <interceptor class="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"
scope="PER_CLASS"/>
- <interceptor class="org.jboss.ejb3.ENCPropagationInterceptor"
scope="PER_VM"/>
- <interceptor name="Basic Authorization"
factory="org.jboss.ejb3.security.RoleBasedAuthorizationInterceptorFactory"
scope="PER_CLASS"/>
- <interceptor name="JACC Authorization"
factory="org.jboss.ejb3.security.JaccAuthorizationInterceptorFactory"
scope="PER_CLASS"/>
- <interceptor
factory="org.jboss.ejb3.security.AuthenticationInterceptorFactory"
scope="PER_CLASS"/>
- <interceptor
factory="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"
scope="PER_CLASS"/>
- <interceptor
class="org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor"
scope="PER_VM"/>
- <interceptor
class="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"
scope="PER_VM"/>
- <interceptor class="org.jboss.ejb3.stateful.StatefulInstanceInterceptor"
scope="PER_VM"/>
- <interceptor
class="org.jboss.ejb3.stateful.SessionSynchronizationInterceptor"
scope="PER_VM"/>
- <interceptor class="org.jboss.ejb3.service.ServiceSingletonInterceptor"
scope="PER_VM"/>
- <interceptor class="org.jboss.ejb3.cache.StatefulReplicationInterceptor"
scope="PER_VM"/>
- <interceptor factory="org.jboss.ejb3.stateful.StatefulRemoveFactory"
scope="PER_CLASS_JOINPOINT"/>
- <interceptor factory="org.jboss.ejb3.tx.TxInterceptorFactory"
scope="PER_CLASS_JOINPOINT"/>
- <interceptor factory="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"
scope="PER_CLASS_JOINPOINT"/>
- <interceptor
factory="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"
scope="PER_CLASS"/>
- <interceptor class="org.jboss.ejb3.AllowedOperationsInterceptor"
scope="PER_VM"/>
- <interceptor
factory="org.jboss.ejb3.mdb.CurrentMessageInjectorInterceptorFactory"
scope="PER_CLASS"/>
- <interceptor
class="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"
scope="PER_VM"/>
-
- <domain name="Stateless Bean">
- <bind pointcut="execution(public * *->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
- <interceptor-ref name="Basic Authorization"/>
- </bind>
- <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public * *->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
- <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
- </bind>
- <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
- @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.ThreadlocalPool.class,
maxSize=30, timeout=10000)
- </annotation>
- </domain>
-
- <domain name="JACC Stateless Bean">
- <bind pointcut="execution(public * *->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
- <interceptor-ref name="JACC Authorization"/>
- </bind>
- <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public * *->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
- <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
- </bind>
- <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
- @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.ThreadlocalPool.class,
maxSize=30, timeout=10000)
- </annotation>
- </domain>
-
- <domain name="Base Stateful Bean">
- <bind pointcut="execution(public * *->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
- <interceptor-ref name="Basic Authorization"/>
- </bind>
- <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public * *->@javax.ejb.Remove(..))">
- <interceptor-ref
name="org.jboss.ejb3.stateful.StatefulRemoveFactory"/>
- </bind>
- <bind pointcut="execution(public * *->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.stateful.StatefulInstanceInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
- <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
- </bind>
- <bind pointcut="execution(public *
$instanceof{javax.ejb.SessionSynchronization}->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.stateful.SessionSynchronizationInterceptor"/>
- </bind>
- <bind pointcut="execution(public * *->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
- </bind>
-
- <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..)) AND !execution(public *
*->@javax.ejb.Remove(..))">
- <interceptor-ref
name="org.jboss.ejb3.cache.StatefulReplicationInterceptor"/>
- </bind>
- <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
- @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.ThreadlocalPool.class,
maxSize=30, timeout=10000)
- </annotation>
- </domain>
-
- <domain name="Stateful Bean" extends="Base Stateful Bean"
inheritBindings="true">
- <!-- NON Clustered cache configuration -->
- <annotation expr="!class((a)org.jboss.annotation.ejb.cache.Cache) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
- @org.jboss.annotation.ejb.cache.Cache
(org.jboss.ejb3.cache.simple.SimpleStatefulCache.class)
- </annotation>
- <annotation
expr="!class((a)org.jboss.annotation.ejb.cache.simple.PersistenceManager) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
- @org.jboss.annotation.ejb.cache.simple.PersistenceManager
(org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager.class)
- </annotation>
- <annotation
expr="!class((a)org.jboss.annotation.ejb.cache.simple.CacheConfig) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
- @org.jboss.annotation.ejb.cache.simple.CacheConfig (maxSize=100000,
idleTimeoutSeconds=300)
- </annotation>
-
- <!-- Clustered cache configuration -->
- <annotation expr="!class((a)org.jboss.annotation.ejb.cache.Cache) AND
class((a)org.jboss.annotation.ejb.Clustered)">
- @org.jboss.annotation.ejb.cache.Cache
(org.jboss.ejb3.cache.tree.StatefulTreeCache.class)
- </annotation>
- <annotation expr="!class((a)org.jboss.annotation.ejb.cache.tree.CacheConfig)
AND class((a)org.jboss.annotation.ejb.Clustered)">
- @org.jboss.annotation.ejb.cache.tree.CacheConfig
(name="jboss.cache:service=EJB3SFSBClusteredCache", maxSize=100000,
idleTimeoutSeconds=300)
- </annotation>
- </domain>
-
- <domain name="JACC Stateful Bean">
- <bind pointcut="execution(public * *->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
- <interceptor-ref name="JACC Authorization"/>
- </bind>
- <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public * *->@javax.ejb.Remove(..))">
- <interceptor-ref
name="org.jboss.ejb3.stateful.StatefulRemoveFactory"/>
- </bind>
- <bind pointcut="execution(public * *->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.stateful.StatefulInstanceInterceptor"/>
- <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
- <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
- </bind>
- <bind pointcut="execution(public *
$instanceof{javax.ejb.SessionSynchronization}->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.stateful.SessionSynchronizationInterceptor"/>
- </bind>
- <bind pointcut="execution(public * *->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
- </bind>
-
- <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..)) AND !execution(public *
*->@javax.ejb.Remove(..))">
- <interceptor-ref
name="org.jboss.ejb3.cache.StatefulReplicationInterceptor"/>
- </bind>
- <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
- @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.ThreadlocalPool.class,
maxSize=30, timeout=10000)
- </annotation>
-
- <!-- NON Clustered cache configuration -->
- <annotation expr="!class((a)org.jboss.annotation.ejb.cache.Cache) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
- @org.jboss.annotation.ejb.cache.Cache
(org.jboss.ejb3.cache.simple.SimpleStatefulCache.class)
- </annotation>
- <annotation
expr="!class((a)org.jboss.annotation.ejb.cache.simple.PersistenceManager) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
- @org.jboss.annotation.ejb.cache.simple.PersistenceManager
(org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager.class)
- </annotation>
- <annotation
expr="!class((a)org.jboss.annotation.ejb.cache.simple.CacheConfig) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
- @org.jboss.annotation.ejb.cache.simple.CacheConfig (maxSize=100000,
idleTimeoutSeconds=300)
- </annotation>
-
- <!-- Clustered cache configuration -->
- <annotation expr="!class((a)org.jboss.annotation.ejb.cache.Cache) AND
class((a)org.jboss.annotation.ejb.Clustered)">
- @org.jboss.annotation.ejb.cache.Cache
(org.jboss.ejb3.cache.tree.StatefulTreeCache.class)
- </annotation>
- <annotation expr="!class((a)org.jboss.annotation.ejb.cache.tree.CacheConfig)
AND class((a)org.jboss.annotation.ejb.Clustered)">
- @org.jboss.annotation.ejb.cache.tree.CacheConfig
(name="jboss.cache:service=EJB3SFSBClusteredCache", maxSize=100000,
idleTimeoutSeconds=300)
- </annotation>
- </domain>
-
- <domain name="Embedded Stateful Bean" extends="Base Stateful
Bean" inheritBindings="true">
- <!-- NON Clustered cache configuration -->
- <annotation expr="!class((a)org.jboss.annotation.ejb.cache.Cache)">
- @org.jboss.annotation.ejb.cache.Cache
(org.jboss.ejb3.cache.NoPassivationCache.class)
- </annotation>
-
- </domain>
-
- <domain name="Message Driven Bean">
- <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public * *->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
- <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
- </bind>
- <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
- @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.StrictMaxPool.class,
maxSize=30, timeout=10000)
- </annotation>
- </domain>
-
- <domain name="Consumer Bean">
- <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public * *->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
- <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
- </bind>
- <bind pointcut="execution(public * *->*(..)) AND (has(*
*->@org.jboss.annotation.ejb.CurrentMessage(..)) OR hasfield(*
*->(a)org.jboss.annotation.ejb.CurrentMessage))">
- <interceptor-ref
name="org.jboss.ejb3.mdb.CurrentMessageInjectorInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public * *->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
- </bind>
- <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
- @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.StrictMaxPool.class,
maxSize=30, timeout=10000)
- </annotation>
- </domain>
-
- <domain name="Service Bean">
- <bind pointcut="execution(public * *->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
- </bind>
- <bind pointcut="!execution(* *->create()) AND !execution(*
*->start()) AND !execution(*->new(..))">
- <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
- <interceptor-ref name="Basic Authorization"/>
- </bind>
- <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public * *->*(..))">
- <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
- <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
- </bind>
- <bind pointcut="execution(public * *->*(..)) AND !execution(*
*->create()) AND !execution(* *->start())">
- <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
- </bind>
- </domain>
-
- <domain name="JACC Service Bean">
- <bind pointcut="execution(public * *->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
- </bind>
- <bind pointcut="!execution(* *->create()) AND !execution(*
*->start()) AND !execution(*->new(..))">
- <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
- <interceptor-ref name="Basic Authorization"/>
- </bind>
- <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
- <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
- </bind>
- <bind pointcut="execution(public * *->*(..))">
- <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
- <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
- <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
- </bind>
- <bind pointcut="execution(public * *->*(..)) AND !execution(*
*->create()) AND !execution(* *->start())">
- <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
- </bind>
- </domain>
-
-
-</aop>
\ No newline at end of file
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/embedded-jboss-beans.xml
b/modules/enterprise/server/integration-tests/src/test/resources/embedded-jboss-beans.xml
deleted file mode 100644
index 05edefa..0000000
---
a/modules/enterprise/server/integration-tests/src/test/resources/embedded-jboss-beans.xml
+++ /dev/null
@@ -1,160 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<deployment
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="urn:jboss:bean-deployer:2.0
bean-deployer_2_0.xsd"
- xmlns="urn:jboss:bean-deployer:2.0">
-
- <bean name="Naming"
class="org.jnp.server.SingletonNamingServer"/>
-
- <bean name="InitialContextProperties"
class="java.util.Hashtable">
- <constructor>
- <parameter class="java.util.Map">
- <map keyClass="java.lang.String"
valueClass="java.lang.String">
- <entry>
- <key>java.naming.factory.initial</key>
- <value>org.jnp.interfaces.LocalOnlyContextFactory</value>
- </entry>
- <entry>
- <key>java.naming.factory.url.pkgs</key>
- <value>org.jboss.naming:org.jnp.interfaces</value>
- </entry>
- </map>
- </parameter>
- </constructor>
- </bean>
-
- <bean name="java:comp/Initializer"
class="org.jboss.ejb3.embedded.JavaCompInitializer">
- <property name="jndiProperties">
- <inject bean="InitialContextProperties"/>
- </property>
- </bean>
-
- <bean name="XidFactory"
class="org.jboss.tm.XidFactoryImpl"/>
-
- <bean name="XidFactoryMBean"
class="org.jboss.ejb3.embedded.XidFactoryMBean">
- <constructor>
- <parameter class="org.jboss.tm.XidFactoryBase">
- <inject bean="XidFactory"/>
- </parameter>
- </constructor>
- </bean>
-
- <bean name="TransactionManagerInitializer"
class="org.jboss.tm.TransactionManagerInitializer">
- <property name="xidFactory">
- <inject bean="XidFactory"/>
- </property>
- <property name="initialContextProperties">
- <inject bean="InitialContextProperties"/>
- </property>
- </bean>
-
- <bean name="UserTransaction"
class="org.jboss.ejb3.embedded.UserTransactionImpl">
- <demand>TransactionManagerInitializer</demand>
- </bean>
-
- <bean name="UserTransactionBinding"
class="org.jboss.ejb3.embedded.JndiBinder">
- <property name="jndiProperties">
- <inject bean="InitialContextProperties"/>
- </property>
- <property name="target">
- <inject bean="UserTransaction"/>
- </property>
- <property name="bindTo">UserTransaction</property>
- <property name="serializable">false</property>
- </bean>
-
-
- <bean name="TransactionManager" class="java.lang.Object">
- <constructor factoryMethod="getTransactionManager">
- <factory bean="TransactionManagerInitializer"/>
- </constructor>
- </bean>
- <bean name="CachedConnectionManager"
class="org.jboss.resource.connectionmanager.CachedConnectionManagerReference">
- <property name="transactionManager">
- <inject bean="TransactionManager"/>
- </property>
- </bean>
-
- <bean name="RHQDSBootstrap"
class="org.jboss.resource.adapter.jdbc.local.LocalTxDataSource">
- <property
name="driverClass">${rhq.test.ds.driver-class}</property>
- <property
name="connectionURL">${rhq.test.ds.connection-url}</property>
- <property
name="userName">${rhq.test.ds.user-name}</property>
- <property name="password">${rhq.test.ds.password}</property>
- <property name="jndiName">java:/RHQDS</property>
- <property name="minSize">0</property>
- <property name="maxSize">20</property>
- <property name="blockingTimeout">3000</property>
- <property name="idleTimeout">100000</property>
- <property name="transactionManager">
- <inject bean="TransactionManager"/>
- </property>
- <property name="cachedConnectionManager">
- <inject bean="CachedConnectionManager"/>
- </property>
- <property name="initialContextProperties">
- <inject bean="InitialContextProperties"/>
- </property>
- </bean>
-
- <bean name="RHQDS" class="java.lang.Object">
- <constructor factoryMethod="getDatasource">
- <factory bean="RHQDSBootstrap"/>
- </constructor>
- </bean>
-
- <!-- needed for Quartz' no-TX data source (even though this is a local-tx,
seems like Quartz is still working) -->
- <bean name="NoTxRHQDSBootstrap"
class="org.jboss.resource.adapter.jdbc.local.LocalTxDataSource">
- <property
name="driverClass">${rhq.test.ds.driver-class}</property>
- <property
name="connectionURL">${rhq.test.ds.connection-url}</property>
- <property
name="userName">${rhq.test.ds.user-name}</property>
- <property name="password">${rhq.test.ds.password}</property>
- <property name="jndiName">java:/NoTxRHQDS</property>
- <property name="minSize">0</property>
- <property name="maxSize">10</property>
- <property name="blockingTimeout">1000</property>
- <property name="idleTimeout">100000</property>
- <property name="transactionManager">
- <inject bean="TransactionManager"/>
- </property>
- <property name="cachedConnectionManager">
- <inject bean="CachedConnectionManager"/>
- </property>
- <property name="initialContextProperties">
- <inject bean="InitialContextProperties"/>
- </property>
- </bean>
-
- <bean name="NoTxRHQDS" class="java.lang.Object">
- <constructor factoryMethod="getDatasource">
- <factory bean="NoTxRHQDSBootstrap"/>
- </constructor>
- </bean>
-
- <bean name="DefaultDSBootstrap"
class="org.jboss.resource.adapter.jdbc.local.LocalTxDataSource">
- <property
name="driverClass">org.hsqldb.jdbcDriver</property>
- <property name="connectionURL">jdbc:hsqldb:.</property>
- <!-- <property
name="connectionURL">jdbc:hsqldb:./hypersonic/localDB</property>
-->
- <property name="userName">sa</property>
- <property name="jndiName">java:/DefaultDS</property>
- <property name="minSize">0</property>
- <property name="maxSize">10</property>
- <property name="blockingTimeout">1000</property>
- <property name="idleTimeout">100000</property>
- <property name="transactionManager">
- <inject bean="TransactionManager"/>
- </property>
- <property name="cachedConnectionManager">
- <inject bean="CachedConnectionManager"/>
- </property>
- <property name="initialContextProperties">
- <inject bean="InitialContextProperties"/>
- </property>
- </bean>
-
- <bean name="DefaultDS" class="java.lang.Object">
- <constructor factoryMethod="getDatasource">
- <factory bean="DefaultDSBootstrap"/>
- </constructor>
- </bean>
-
-</deployment>
\ No newline at end of file
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/jboss-jms-beans.xml
b/modules/enterprise/server/integration-tests/src/test/resources/jboss-jms-beans.xml
deleted file mode 100644
index 287cffc..0000000
--- a/modules/enterprise/server/integration-tests/src/test/resources/jboss-jms-beans.xml
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<deployment
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="urn:jboss:bean-deployer:2.0
bean-deployer_2_0.xsd"
- xmlns="urn:jboss:bean-deployer:2.0">
- <bean name="jboss.mq:service=JMSProviderLoader,name=JMSProvider"
class="org.jboss.jms.jndi.JNDIProviderAdapter">
- <property name="factoryRef">java:/JmsXA</property>
- <property name="queueFactoryRef">java:/JmsXA</property>
- <property name="topicFactoryRef">java:/JmsXA</property>
- <property name="properties"
class="java.util.Properties">
- <map keyClass="java.lang.String"
valueClass="java.lang.String">
- <entry>
- <key>java.naming.factory.initial</key>
-
<value>org.jnp.interfaces.LocalOnlyContextFactory</value>
- </entry>
- <entry>
- <key>java.naming.factory.url.pkgs</key>
- <value>org.jboss.naming:org.jnp.interfaces</value>
- </entry>
- </map>
- </property>
- </bean>
-
- <bean name="b1" class="org.jboss.ejb3.embedded.JndiBinder">
- <property name="jndiProperties"><inject
bean="InitialContextProperties"/></property>
- <property name="target"><inject
bean="jboss.mq:service=JMSProviderLoader,name=JMSProvider"/></property>
- <property name="bindTo">java:/DefaultJMSProvider</property>
- <property name="serializable">true</property>
- </bean>
-
- <bean name="jboss.mq:service=ServerSessionPoolMBean,name=StdJMSPool"
class="org.jboss.jms.asf.StdServerSessionPoolFactory">
- <property name="name">StdJMSPool</property>
- <property name="xidFactory"><inject
bean="XidFactoryMBean"/></property>
- <property name="transactionManager"><inject
bean="TransactionManager"/></property>
- </bean>
-
- <bean name="b2" class="org.jboss.ejb3.embedded.JndiBinder">
- <property name="jndiProperties"><inject
bean="InitialContextProperties"/></property>
- <property name="target"><inject
bean="jboss.mq:service=ServerSessionPoolMBean,name=StdJMSPool"/></property>
- <property name="bindTo">java:/StdJMSPool</property>
- <property name="serializable">false</property>
- </bean>
-
-
- <bean name="jboss.mq:service=PersistenceManager"
class="org.jboss.mq.pm.none.PersistenceManager">
- </bean>
-
- <bean name="jboss.mq:service=MessageCache"
class="org.jboss.mq.kernel.MessageCache">
- <property name="persistenceManager"><inject
bean="jboss.mq:service=PersistenceManager"/></property>
- <property name="highMemoryMark">50</property>
- <property name="maxMemoryMark">60</property>
- </bean>
-
- <bean name="jms-rar-WorkManager"
class="org.jboss.ejb3.embedded.resource.JBossWorkManager">
- </bean>
-
- <bean name="jms-rar-DeploymentInfo"
class="org.jboss.ejb3.embedded.resource.Ejb3DeploymentInfo">
- <constructor>
- <parameter
class="java.lang.String">jms-ra.rar</parameter>
- <parameter
class="java.lang.String">javax.jms.MessageListener</parameter>
- <parameter
class="java.lang.String">org.jboss.resource.adapter.jms.inflow.JmsActivationSpec</parameter>
- </constructor>
- </bean>
-
- <bean name="jboss.jca:name='jms-ra.rar',service=RARDeployment"
class="org.jboss.ejb3.embedded.resource.RARDeployment">
- <constructor>
- <parameter class="org.jboss.deployment.DeploymentInfo">
- <inject bean="jms-rar-DeploymentInfo"/>
- </parameter>
- </constructor>
- <property name="workManager"><inject
bean="jms-rar-WorkManager"/></property>
- </bean>
-
- <bean name="jboss.mq:service=StateManager"
class="org.jboss.mq.sm.none.NullStateManager">
- </bean>
-
- <bean name="BasicQueueParameters"
class="org.jboss.mq.server.BasicQueueParameters"/>
-
- <bean name="jboss.mq:service=ThreadPool"
class="org.jboss.util.threadpool.BasicThreadPool">
- <property name="name">JMSThread</property>
- <property name="threadGroupName">JBossMQ Server
Threads</property>
- <!-- The max number of threads in the pool -->
- <property name="maximumPoolSize">10</property>
- <!-- The max number of tasks before the queue is full -->
- <property name="maximumQueueSize">1000</property>
- <!-- The behavior of the pool when a task is added and the queue is full.
- abort - a RuntimeException is thrown
- run - the calling thread executes the task
- wait - the calling thread blocks until the queue has room
- discard - the task is silently discarded without being run
- discardOldest - check to see if a task is about to complete and enque
- the new task if possible, else run the task in the calling thread
- -->
- <property name="blockingMode">run</property>
- </bean>
-
- <bean name="jboss.mq:service=DestinationManager"
class="org.jboss.mq.server.JMSDestinationManager">
- <constructor>
- <parameter class="org.jboss.mq.server.BasicQueueParameters">
- <inject bean="BasicQueueParameters"/>
- </parameter>
- </constructor>
- <property name="persistenceManager"><inject
bean="jboss.mq:service=PersistenceManager"/></property>
- <property name="messageCache"><inject
bean="jboss.mq:service=MessageCache"/></property>
- <property name="stateManager"><inject
bean="jboss.mq:service=StateManager"/></property>
- <property name="threadPool"><inject
bean="jboss.mq:service=ThreadPool"/></property>
- <property name="threadGroup"><inject
bean="jboss.mq:service=ThreadPool"
property="threadGroup"/></property>
- <start method="startServer"/>
- <stop method="stopServer"/>
- </bean>
-
- <bean name="jboss.mq.destination:service=Queue,name=DLQ"
class="org.jboss.mq.kernel.Queue">
- <property name="destinationManagerPojo"><inject
bean="jboss.mq:service=DestinationManager"/></property>
- <property name="initialContextProperties"><inject
bean="InitialContextProperties"/></property>
- <property name="destinationName">DLQ</property>
- </bean>
-
- <bean name="jboss.mq:service=Invoker"
class="org.jboss.mq.server.JMSServerInvoker">
- <property name="next"><inject
bean="jboss.mq:service=DestinationManager"/></property>
- </bean>
-
- <bean name="jboss.mq:service=invocationlayer,type=JVM"
class="org.jboss.mq.kernel.JVMIL">
- <property name="jmsInvoker"><inject
bean="jboss.mq:service=Invoker"/></property>
- <!-- notice we actually switched - the non-xa connection factory JNDI Ref is the
JNDI name our EJBs use -->
- <!-- the embedded EJB container doesn't support XA, so the connection factory
our JmsXA JNDI lookup will return will be a non-XA factory -->
- <property
name="connectionFactoryJNDIRef">java:/JmsXA</property>
- <property
name="XAConnectionFactoryJNDIRef">java:/ConnectionFactory</property>
- <property name="pingPeriod">0</property>
- <property name="initialContextProperties"><inject
bean="InitialContextProperties"/></property>
- </bean>
-
-</deployment>
diff --git a/modules/enterprise/server/integration-tests/src/test/resources/jms-ra.rar
b/modules/enterprise/server/integration-tests/src/test/resources/jms-ra.rar
deleted file mode 100644
index c4807c6..0000000
Binary files a/modules/enterprise/server/integration-tests/src/test/resources/jms-ra.rar
and /dev/null differ
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/jndi.properties
b/modules/enterprise/server/integration-tests/src/test/resources/jndi.properties
deleted file mode 100644
index 9225cef..0000000
--- a/modules/enterprise/server/integration-tests/src/test/resources/jndi.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-java.naming.factory.initial=org.jnp.interfaces.LocalOnlyContextFactory
-java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
\ No newline at end of file
diff --git a/modules/enterprise/server/integration-tests/src/test/resources/log4j.xml
b/modules/enterprise/server/integration-tests/src/test/resources/log4j.xml
deleted file mode 100644
index bc65329..0000000
--- a/modules/enterprise/server/integration-tests/src/test/resources/log4j.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<!-- ===================================================================== -->
-<!-- -->
-<!-- Log4j Configuration -->
-<!-- -->
-<!-- ===================================================================== -->
-
-<!-- $Id: log4j.xml 39945 2006-01-12 02:44:07Z bill $ -->
-
-<!--
- | For more configuration infromation and examples see the Jakarta Log4j
- | owebsite:
http://jakarta.apache.org/log4j
- -->
-
-<log4j:configuration
xmlns:log4j="http://jakarta.apache.org/log4j/"
debug="true">
-
- <appender name="CONSOLE"
class="org.apache.log4j.ConsoleAppender">
- <errorHandler
class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
- <param name="Target" value="System.out"/>
- <param name="Threshold" value="WARN"/>
-
- <layout class="org.apache.log4j.PatternLayout">
- <!-- The default pattern: Date Priority [Category] Messagen -->
- <!--
- <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p
[%c{1}] %m%n"/>
- -->
- <param name="ConversionPattern" value="%-5p %d{dd-MM
HH:mm:ss,SSS} [%c] (%F:%M:%L) -%m%n"/>
- </layout>
- </appender>
-
- <appender name="FILE"
class="org.apache.log4j.RollingFileAppender">
- <param name="File" value="target/server-jar-test.log"/>
- <param name="Threshold" value="WARN"/>
- <param name="Append" value="false"/>
-
- <layout class="org.apache.log4j.PatternLayout">
- <!-- The default pattern: Date Priority [Category] Messagen -->
- <!--
- <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p
[%c{1}] %m%n"/>
- -->
- <param name="ConversionPattern" value="%-5p %d{dd-MM
HH:mm:ss,SSS} [%c] (%F:%M:%L) -%m%n"/>
- </layout>
- </appender>
-
- <!-- Hibernate logs WARNINGS frequent from this class, in test envs. -->
- <category name="org.hibernate.hql.ast.QueryTranslatorImpl">
- <priority value="ERROR"/>
- </category>
-
- <!-- hides the TIMER SERVICE IS NOT INSTALLED warning - we know embedded EJB3
container doesn't support timers -->
- <category
name="org.jboss.ejb3.timerservice.jboss.JBossTimerServiceFactory">
- <priority value="ERROR"/>
- </category>
-
- <!-- hides the shutdown warnings - for some reason, the container spits out some
warnings when shutting down -->
- <category
name="org.jboss.kernel.plugins.dependency.StartStopLifecycleAction">
- <priority value="ERROR"/>
- </category>
-
- <!-- Hibernate SQL logs -->
- <!--
- <category name="org.hibernate.SQL">
- <priority value="DEBUG"/>
- </category>
- -->
-
- <root>
- <appender-ref ref="CONSOLE"/>
- <appender-ref ref="FILE"/>
- </root>
-
-</log4j:configuration>
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/login-config.xml
b/modules/enterprise/server/integration-tests/src/test/resources/login-config.xml
deleted file mode 100644
index 645294d..0000000
--- a/modules/enterprise/server/integration-tests/src/test/resources/login-config.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version='1.0'?>
-
-<!DOCTYPE policy PUBLIC
- "-//JBoss//DTD JBOSS Security Config 3.0//EN"
- "http://www.jboss.org/j2ee/dtd/security_config.dtd">
-
-<!-- The XML based JAAS login configuration read by the
-org.jboss.security.auth.login.XMLLoginConfig mbean. Add
-an application-policy element for each security domain.
-
-The outline of the application-policy is:
-<application-policy name="security-domain-name">
- <authentication>
- <login-module code="login.module1.class.name"
flag="control_flag">
- <module-option name =
"option1-name">option1-value</module-option>
- <module-option name =
"option2-name">option2-value</module-option>
- ...
- </login-module>
-
- <login-module code="login.module2.class.name"
flag="control_flag">
- ...
- </login-module>
- ...
- </authentication>
-</application-policy>
-
-$Revision: 42748 $
--->
-
-<policy>
- <!-- Used by clients within the application server VM such as
- mbeans and servlets that access EJBs.
- -->
- <application-policy name="client-login">
- <authentication>
- <login-module code="org.jboss.security.ClientLoginModule"
- flag="required">
- <!-- Any existing security context will be restored on logout -->
- <module-option
name="restore-login-identity">true</module-option>
- </login-module>
- </authentication>
- </application-policy>
-
- <application-policy name = "jbossmq">
- <authentication>
- <login-module code = "org.jboss.mq.sm.file.DynamicLoginModule"
flag = "required">
- <module-option name =
"unauthenticatedIdentity">guest</module-option>
- <module-option name =
"sm.objectname">jboss.mq:service=StateManager</module-option>
- </login-module>
- </authentication>
- </application-policy>
-
- <application-policy name="other">
- <!-- A simple server login module, which can be used when the number
- of users is relatively small. It uses two properties files:
- users.properties, which holds users (key) and their password (value).
- roles.properties, which holds users (key) and a comma-separated list of
- their roles (value).
- The unauthenticatedIdentity property defines the name of the principal
- that will be used when a null username and password are presented as is
- the case for an unuathenticated web client or MDB. If you want to
- allow such users to be authenticated add the property, e.g.,
- unauthenticatedIdentity="nobody"
- -->
- <authentication>
- <login-module
code="org.jboss.security.auth.spi.UsersRolesLoginModule"
- flag="required"/>
- </authentication>
- </application-policy>
-
-</policy>
-
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/rhq-mdb-beans.xml
b/modules/enterprise/server/integration-tests/src/test/resources/rhq-mdb-beans.xml
deleted file mode 100644
index ad05b5e..0000000
--- a/modules/enterprise/server/integration-tests/src/test/resources/rhq-mdb-beans.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<deployment
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="urn:jboss:bean-deployer:2.0
bean-deployer_2_0.xsd"
- xmlns="urn:jboss:bean-deployer:2.0">
-
- <bean name="jboss.mq.destination:service=Queue,name=AlertConditionQueue"
class="org.jboss.mq.kernel.Queue">
- <property name="destinationManagerPojo"><inject
bean="jboss.mq:service=DestinationManager"/></property>
- <property name="initialContextProperties"><inject
bean="InitialContextProperties"/></property>
- <property
name="destinationName">AlertConditionQueue</property>
- </bean>
-
- <bean name="jboss.mq.destination:service=Queue,name=DriftChangesetQueue"
class="org.jboss.mq.kernel.Queue">
- <property name="destinationManagerPojo"><inject
bean="jboss.mq:service=DestinationManager"/></property>
- <property name="initialContextProperties"><inject
bean="InitialContextProperties"/></property>
- <property
name="destinationName">DriftChangesetQueue</property>
- </bean>
-
- <bean name="jboss.mq.destination:service=Queue,name=DriftFileQueue"
class="org.jboss.mq.kernel.Queue">
- <property name="destinationManagerPojo"><inject
bean="jboss.mq:service=DestinationManager"/></property>
- <property name="initialContextProperties"><inject
bean="InitialContextProperties"/></property>
- <property name="destinationName">DriftFileQueue</property>
- </bean>
-
-</deployment>
\ No newline at end of file
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/security-beans.xml
b/modules/enterprise/server/integration-tests/src/test/resources/security-beans.xml
deleted file mode 100644
index 84fa819..0000000
--- a/modules/enterprise/server/integration-tests/src/test/resources/security-beans.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<deployment
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
- xmlns="urn:jboss:bean-deployer">
-
- <bean class="org.jboss.ejb3.embedded.JaasSecurityManagerService"
- name="jboss.security:service=JaasSecurityManager">
- <property name="initialContextProperties">
- <inject bean="InitialContextProperties"/>
- </property>
- </bean>
-</deployment>
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/test-assist-color-number.txt
b/modules/enterprise/server/integration-tests/src/test/resources/test-assist-color-number.txt
deleted file mode 100644
index 6ad90cc..0000000
---
a/modules/enterprise/server/integration-tests/src/test/resources/test-assist-color-number.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-
-color[ number
-c
-color[
-n
-number
-r
-color[ number
-lo
-color[
-number
-number!= number!== number= number==
-be
-number
-number==
-number=="two" number=="four" number=="twenty-two"
number=="twenty-four" number=="forty-two"
-number==t
-number=="two" number=="twenty-two" number=="twenty-four"
number=="forty-two"
-number==fo
-number=="four" number=="twenty-four" number=="forty-two"
-color
-color[
-color[
-color[primary] color[other]
-color[p
-color[primary]
-color[o
-color[other]
-color[r
-color[primary] color[other]
-color[primary
-color[primary]
-color[primary]
-color[primary]!= color[primary]!== color[primary]= color[primary]==
-color[primary]=
-color[primary]="red" color[primary]="green"
color[primary]="blue"
-color[primary]=e
-color[primary]="red" color[primary]="green"
color[primary]="blue"
-color[primary]=d
-color[primary]="red"
-color[primary]=g
-color[primary]="green"
-color[primary]=b
-color[primary]="blue"
-color[primary]=r
-color[primary]="red" color[primary]="green"
\ No newline at end of file
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/test-ldap.properties
b/modules/enterprise/server/integration-tests/src/test/resources/test-ldap.properties
deleted file mode 100644
index 3316083..0000000
--- a/modules/enterprise/server/integration-tests/src/test/resources/test-ldap.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-rhq.test.ldap.url=${rhq.test.ldap.url}
-rhq.test.ldap.LDAPFactory=${rhq.test.ldap.LDAPFactory}
\ No newline at end of file
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/test-scheduler.properties
b/modules/enterprise/server/integration-tests/src/test/resources/test-scheduler.properties
deleted file mode 100644
index 804639a..0000000
---
a/modules/enterprise/server/integration-tests/src/test/resources/test-scheduler.properties
+++ /dev/null
@@ -1,29 +0,0 @@
-# QUARTZ CONFIGURATION FOR OUR UNIT TESTS
-# our test timeout will be fast, 5 seconds
-rhq.server.operation-timeout = 5
-
-# scheduler factory config
-org.quartz.scheduler.instanceName = RHQScheduler
-org.quartz.scheduler.instanceId = AUTO
-
-# thread pool config
-org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
-org.quartz.threadPool.threadCount = 25
-org.quartz.threadPool.threadPriority = 5
-
-# database config - note the use of POSTGRES for tests
-org.quartz.jobStore.class =
org.quartz.impl.jdbcjobstore.JobStoreCMT
-org.quartz.jobStore.driverDelegateClass =
org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
-# tests don't need this
-org.quartz.jobStore.isClustered = false
-org.quartz.jobStore.clusterCheckinInterval = 600000
-# make this a small non-zero time (in ms) so the scheduler (almost) never sleeps for more
predictable test timing
-org.quartz.scheduler.idleWaitTime = 10
-org.quartz.jobStore.tablePrefix = RHQ_QRTZ_
-org.quartz.jobStore.useProperties = true
-org.quartz.jobStore.dataSource = RHQDS
-org.quartz.dataSource.RHQDS.jndiURL = java:/RHQDS
-org.quartz.dataSource.RHQDS.maxConnections = 10
-org.quartz.jobStore.nonManagedTXDataSource = NoTxRHQDS
-org.quartz.dataSource.NoTxRHQDS.jndiURL = java:/NoTxRHQDS
-org.quartz.dataSource.NoTxRHQDS.maxConnections = 10
\ No newline at end of file
diff --git a/modules/enterprise/server/integration-tests/src/test/resources/testng.xml
b/modules/enterprise/server/integration-tests/src/test/resources/testng.xml
deleted file mode 100644
index 1452edb..0000000
--- a/modules/enterprise/server/integration-tests/src/test/resources/testng.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
-
-<suite name="EJB3 Testsuite" >
- <test name="EJB3 tests" >
- <groups>
- <run>
- <include name="integration.ejb3"/>
- </run>
- </groups>
-
- </test>
-</suite>
diff --git a/modules/enterprise/server/itests/pom.xml
b/modules/enterprise/server/itests/pom.xml
new file mode 100644
index 0000000..6d871a1
--- /dev/null
+++ b/modules/enterprise/server/itests/pom.xml
@@ -0,0 +1,556 @@
+<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-parent</artifactId>
+ <version>4.1.0-SNAPSHOT</version>
+ <relativePath>../../../../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>rhq-server-itests</artifactId>
+
+ <name>RHQ Server Integration Tests</name>
+ <description>RHQ enterprise server integration tests</description>
+
+ <scm>
+
<
connection>scm:git:ssh://git.fedorahosted.org/git/rhq.git/modules/ente...
+
<
developerConnection>scm:git:ssh://git.fedorahosted.org/git/rhq.git/mod...
+ </scm>
+
+ <properties>
+ <rhq.server.datasource>java:/RHQDS</rhq.server.datasource>
+ <rhq.server.ds-mapping>PostgreSQL</rhq.server.ds-mapping>
+
<jboss-embeddable-ejb3.version>1.0.0.Alpha9</jboss-embeddable-ejb3.version>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-enterprise-comm</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-enterprise-server-xml-schemas</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-core-domain</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-core-client-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-common-drift</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>com.googlecode.java-diff-utils</groupId>
+ <artifactId>diffutils</artifactId>
+ <version>1.2.1</version>
+ </dependency>
+
+ <!--================ 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. -->
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>test-utils</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-core-domain</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-enterprise-server</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-enterprise-server</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>rhq-core-client-api</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq.helpers</groupId>
+ <artifactId>perftest-support</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>ant</groupId>
+ <artifactId>ant</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>ant</groupId>
+ <artifactId>ant-launcher</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>jboss.jboss-embeddable-ejb3</groupId>
+ <artifactId>jboss-ejb3-all</artifactId>
+ <version>${jboss-embeddable-ejb3.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- NOTE: The remaining test deps correspond to the classes contained in
hibernate-all.jar and thirdparty-all.jar. -->
+
+ <dependency>
+ <groupId>antlr</groupId>
+ <artifactId>antlr</artifactId>
+ <version>2.7.7</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>javassist</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>trove</groupId>
+ <artifactId>trove</artifactId>
+ <version>1.0.2</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>xerces</groupId>
+ <artifactId>xercesImpl</artifactId>
+ <version>2.8.1</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>net.sf.opencsv</groupId>
+ <artifactId>opencsv</artifactId>
+ <version>1.8</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-jxpath</groupId>
+ <artifactId>commons-jxpath</artifactId>
+ <version>1.3</version>
+ <scope>test</scope>
+ </dependency>
+
+
+ <!-- 3rd Party Deps -->
+
+ <dependency>
+ <groupId>org.antlr</groupId>
+ <artifactId>antlr</artifactId>
+ <version>3.2</version>
+ </dependency>
+
+ <!-- Required by a couple APL and Lather classes - TODO: Remove this once APL
and Lather have been excised. -->
+ <dependency>
+ <groupId>commons-beanutils</groupId>
+ <artifactId>commons-beanutils</artifactId>
+ <version>1.6.1</version>
+ </dependency>
+
+ <!-- Required by a couple APL classes - TODO: Remove this once APL has been
removed. -->
+ <!-- also required by EJB3 Embedded (test scope) -->
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>3.2</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-httpclient</groupId>
+ <artifactId>commons-httpclient</artifactId>
+ <version>3.0.1</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.4</version>
+ </dependency>
+
+ <!-- Required by a couple APL classes - TODO: Remove this once APL has been
removed. -->
+ <dependency>
+ <groupId>commons-validator</groupId>
+ <artifactId>commons-validator</artifactId>
+ <version>1.1.4</version>
+ </dependency>
+
+ <!-- required by RHQ server classes, as well as EJB3 Embedded -->
+ <dependency>
+ <groupId>dom4j</groupId>
+ <artifactId>dom4j</artifactId>
+ <version>1.6.1-jboss</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>gnu-getopt</groupId>
+ <artifactId>getopt</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ </dependency>
+
+ <dependency>
+ <groupId>hibernate</groupId>
+ <artifactId>hibernate3</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>hibernate-annotations</groupId>
+ <artifactId>hibernate-annotations</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>hibernate-entitymanager</groupId>
+ <artifactId>hibernate-entitymanager</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>i18nlog</groupId>
+ <artifactId>i18nlog</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-javamail_1.3.1_spec</artifactId>
+ <!-- The Sun javamail jar isn't available from a public repo due to
licensing issues,
+ so use the Geronimo one instead. -->
+ <version>1.3</version>
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>javax.persistence</groupId>
+ <artifactId>persistence-api</artifactId>
+ <version>1.0</version>
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.4</version>
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>jsp-api</artifactId>
+ <version>2.0</version>
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-annotations-ejb3</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-cache</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-common</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-ejb3x</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <!-- includes the org.jboss.ejb3.StrictMaxPool class, which is needed by the
PoolClass annotation used on some
+ of our SLSB's -->
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-ejb3</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-j2ee</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-jmx</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-system</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jbosssx</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jbpm</artifactId>
+ <version>3.1.1</version>
+ </dependency>
+
+ <!-- for the transaction interrupt EJB3 interceptor -->
+ <dependency>
+ <groupId>org.jboss.transaction</groupId>
+ <artifactId>jboss-jta</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>org.opensymphony.quartz</groupId>
+ <artifactId>quartz</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS itself, which the
container build has packaged with 1.6.5 -->
+ </dependency>
+
+ <dependency>
+ <groupId>org.opensymphony.quartz</groupId>
+ <artifactId>quartz-oracle</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS itself, which the
container build has packaged with 1.6.5 -->
+ </dependency>
+
+ <dependency>
+ <groupId>org.easymock</groupId>
+ <artifactId>easymockclassextension</artifactId>
+ <version>2.2</version>
+ <scope>test</scope>
+ <!-- somehow this is needed otherwise the hibernate stuff doesn't
initialize in our tests -->
+ </dependency>
+
+ <dependency>
+ <groupId>org.snmp4j</groupId>
+ <artifactId>snmp4j</artifactId>
+ <version>1.8.2</version>
+ </dependency>
+
+ <!-- required by RHQ server classes, as well as EJB3 Embedded -->
+ <dependency>
+ <groupId>oswego-concurrent</groupId>
+ <artifactId>concurrent</artifactId>
+ <version>1.3.4</version>
+ </dependency>
+
+ <!-- TODO: Why is this needed? -->
+ <dependency>
+ <groupId>postgresql</groupId>
+ <artifactId>postgresql</artifactId>
+ <!--<scope>test</scope>-->
+ </dependency>
+
+ <dependency>
+ <groupId>rss4j</groupId>
+ <artifactId>rss4j</artifactId>
+ <version>0.92-on.2</version>
+ </dependency>
+
+ <dependency>
+ <groupId>tomcat</groupId>
+ <artifactId>catalina</artifactId>
+ <version>5.5.20</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>tomcat</groupId>
+ <artifactId>tomcat-jk</artifactId>
+ <version>4.1.31</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Needed by com.jboss.jbossnetwork.apl.actions.xml.XPathProcessor; TODO:
Remove once APL has been excised. -->
+ <dependency>
+ <groupId>xalan</groupId>
+ <artifactId>xalan</artifactId>
+ <version>2.5.1</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>com.jcraft</groupId>
+ <artifactId>jsch</artifactId>
+ <version>0.1.29</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.el</groupId>
+ <artifactId>jboss-el</artifactId>
+ <version>2.0.1.GA</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.freemarker</groupId>
+ <artifactId>freemarker</artifactId>
+ <version>2.3.18</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-core-dbutils</artifactId>
+ <version>${project.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>ant</groupId>
+ <artifactId>ant</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <testResources>
+ <testResource>
+ <directory>src/test/resources</directory>
+ <filtering>true</filtering>
+ </testResource>
+ </testResources>
+
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+
+ <execution>
+ <phase>process-classes</phase>
+ <configuration>
+ <tasks>
+ <!-- generate the I18N resource bundles -->
+ <taskdef name="i18n"
classpathref="maven.runtime.classpath"
classname="mazz.i18n.ant.I18NAntTask" />
+
+ <i18n outputdir="${project.build.outputDirectory}"
defaultlocale="en" verbose="false" append="false"
verify="true">
+ <classpath refid="maven.runtime.classpath" />
+ <classfileset
dir="${project.build.outputDirectory}">
+ <include
name="**/ServerI18NResourceKeys.class" />
+ <include name="**/AlertI18NResourceKeys.class"
/>
+ </classfileset>
+ </i18n>
+
+ <!-- create our rhq-server-version.properties file that goes
in our jar -->
+ <tstamp>
+ <format property="build.time"
pattern="dd.MMM.yyyy HH.mm.ss z" />
+ </tstamp>
+
+ <echo
file="${project.build.outputDirectory}/rhq-server-version.properties"
append="false">Product-Name=${rhq.product.name}
+Product-Version=${project.version}
+Module-Name=${project.name}
+Module-Version=${project.version}
+Build-Number=${buildNumber}
+Build-Date=${build.time}
+Build-Jdk-Vendor=${java.vendor}
+Build-Jdk=${java.version}
+Build-OS-Name=${os.name}
+Build-OS-Version=${os.version}
+</echo>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ <!-- in order to get JMS to work properly in embedded test container,
extract jms-rs.rar classes -->
+ <execution>
+ <id>Extract JMS classes from RAR needed for JMS tests</id>
+ <phase>process-classes</phase>
+ <configuration>
+ <tasks>
+ <unzip src="src/test/resources/jms-ra.rar"
dest="target">
+ <patternset>
+ <include name="jms-ra.jar"/>
+ </patternset>
+ </unzip>
+ <unzip src="target/jms-ra.jar"
dest="target/test-classes">
+ <patternset>
+ <include name="org/**"/>
+ </patternset>
+ </unzip>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginService.java
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginService.java
new file mode 100644
index 0000000..64c6537
--- /dev/null
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginService.java
@@ -0,0 +1,146 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2011 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.drift;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
+import org.rhq.core.domain.plugin.PluginKey;
+import org.rhq.core.domain.plugin.PluginStatusType;
+import org.rhq.core.domain.plugin.ServerPlugin;
+import org.rhq.core.util.MessageDigestGenerator;
+import org.rhq.enterprise.server.plugin.pc.AbstractTypeServerPluginContainer;
+import org.rhq.enterprise.server.plugin.pc.MasterServerPluginContainer;
+import org.rhq.enterprise.server.plugin.pc.MasterServerPluginContainerConfiguration;
+import org.rhq.enterprise.server.plugin.pc.ServerPluginEnvironment;
+import org.rhq.enterprise.server.plugin.pc.ServerPluginManager;
+import org.rhq.enterprise.server.plugin.pc.ServerPluginService;
+import org.rhq.enterprise.server.plugin.pc.ServerPluginType;
+import org.rhq.enterprise.server.plugin.pc.drift.DriftServerPluginContainer;
+import org.rhq.enterprise.server.plugin.pc.drift.DriftServerPluginManager;
+import org.rhq.enterprise.server.xmlschema.ServerPluginDescriptorMetadataParser;
+import
org.rhq.enterprise.server.xmlschema.generated.serverplugin.ServerPluginDescriptorType;
+
+public class DriftServerPluginService extends ServerPluginService implements
DriftServerPluginServiceMBean {
+
+ public TestMasterServerPluginContainer master;
+ public MasterServerPluginContainerConfiguration masterConfig;
+
+ public DriftServerPluginService() {
+ // build the config at constructor time so tests have it even before the PC is
initialized
+ File dir = new File(System.getProperty("java.io.tmpdir"),
"test-server-plugins");
+ this.masterConfig = new MasterServerPluginContainerConfiguration(dir, dir, dir,
null);
+ }
+
+ @Override
+ public MasterServerPluginContainer createMasterPluginContainer() {
+ this.master = new TestMasterServerPluginContainer();
+ this.master.initialize(this.masterConfig);
+ return this.master;
+ }
+
+ class TestMasterServerPluginContainer extends MasterServerPluginContainer {
+ @Override
+ protected ClassLoader createRootServerPluginClassLoader() {
+ return getClass().getClassLoader();
+ }
+
+ @Override
+ protected Map<URL, ? extends ServerPluginDescriptorType>
preloadAllPlugins() throws Exception {
+ // if our test never setup any plugins, ignore it and just return an empty
map
+ File pluginDir = getConfiguration().getPluginDirectory();
+ if (pluginDir == null || pluginDir.listFiles() == null ||
pluginDir.listFiles().length == 0) {
+ return new HashMap<URL, ServerPluginDescriptorType>();
+ } else {
+ return super.preloadAllPlugins();
+ }
+ }
+
+ @Override
+ protected List<PluginKey> getDisabledPluginKeys() {
+ // in the real world, the db is checked for enable flag, here we say all
plugins are enabled
+ return new ArrayList<PluginKey>();
+ }
+
+ @Override
+ protected List<AbstractTypeServerPluginContainer> createPluginContainers()
{
+ ArrayList<AbstractTypeServerPluginContainer> pcs = new
ArrayList<AbstractTypeServerPluginContainer>(1);
+ DriftServerPluginContainer driftPC = new
TestDriftServerPluginContainer(this);
+ pcs.add(driftPC);
+
+ return pcs;
+ }
+ }
+
+ class TestDriftServerPluginContainer extends DriftServerPluginContainer {
+ public TestDriftServerPluginContainer(MasterServerPluginContainer master) {
+ super(master);
+ }
+
+ @Override
+ protected ServerPluginManager createPluginManager() {
+ return new TestDriftServerPluginManager(this);
+ }
+ }
+
+ class TestDriftServerPluginManager extends DriftServerPluginManager {
+ public TestDriftServerPluginManager(DriftServerPluginContainer pc) {
+ super(pc);
+ }
+
+ @Override
+ protected ServerPlugin getPlugin(ServerPluginEnvironment env) {
+ try {
+ Configuration pluginConfig = null;
+ Configuration scheduledJobsConfig = null;
+ ConfigurationDefinition configDef;
+
+ ServerPluginDescriptorType pluginDescriptor = env.getPluginDescriptor();
+
+ configDef =
ServerPluginDescriptorMetadataParser.getPluginConfigurationDefinition(pluginDescriptor);
+ if (configDef != null) {
+ pluginConfig = configDef.getDefaultTemplate().createConfiguration();
+ }
+
+ configDef =
ServerPluginDescriptorMetadataParser.getScheduledJobsDefinition(pluginDescriptor);
+ if (configDef != null) {
+ scheduledJobsConfig =
configDef.getDefaultTemplate().createConfiguration();
+ }
+
+ File pluginFile = new File(env.getPluginUrl().toURI());
+ ServerPlugin plugin = new ServerPlugin(0,
env.getPluginKey().getPluginName(), pluginFile.getName(),
+ pluginDescriptor.getDisplayName(), true, PluginStatusType.INSTALLED,
pluginDescriptor
+ .getDescription(), "",
MessageDigestGenerator.getDigestString(pluginFile), pluginDescriptor
+ .getVersion(), pluginDescriptor.getVersion(), pluginConfig,
scheduledJobsConfig,
+ new ServerPluginType(pluginDescriptor).stringify(),
System.currentTimeMillis(), System
+ .currentTimeMillis());
+ return plugin;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+}
diff --git
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginServiceMBean.java
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginServiceMBean.java
new file mode 100644
index 0000000..d38374e
--- /dev/null
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginServiceMBean.java
@@ -0,0 +1,25 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2011 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.drift;
+
+import org.rhq.enterprise.server.plugin.pc.ServerPluginServiceManagement;
+
+public interface DriftServerPluginServiceMBean extends ServerPluginServiceManagement {
+}
diff --git
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftServerTest.java
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftServerTest.java
new file mode 100644
index 0000000..7db3365
--- /dev/null
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftServerTest.java
@@ -0,0 +1,241 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2011 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.drift;
+
+import static org.rhq.core.domain.resource.ResourceCategory.SERVER;
+import static org.rhq.enterprise.server.util.LookupUtil.getSubjectManager;
+
+import java.io.File;
+import java.lang.reflect.Method;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.NonUniqueResultException;
+
+import org.apache.commons.io.FileUtils;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.drift.Drift;
+import org.rhq.core.domain.drift.DriftDefinition;
+import org.rhq.core.domain.drift.DriftDefinitionTemplate;
+import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.shared.ResourceBuilder;
+import org.rhq.core.domain.shared.ResourceTypeBuilder;
+import org.rhq.enterprise.server.plugin.ServerPluginsLocal;
+import org.rhq.enterprise.server.test.AbstractEJB3Test;
+import org.rhq.enterprise.server.test.TestServerCommunicationsService;
+import org.rhq.test.TransactionCallback;
+
+@Test(groups = "drift")
+public class DriftServerTest extends AbstractEJB3Test {
+
+ protected final String RESOURCE_TYPE_NAME = getClass().getSimpleName() +
"_RESOURCE_TYPE";
+
+ protected final String AGENT_NAME = getClass().getSimpleName() + "_AGENT";
+
+ protected final String RESOURCE_NAME = getClass().getSimpleName() +
"_RESOURCE";
+
+ private ServerPluginsLocal serverPluginsMgr;
+
+ protected DriftServerPluginService driftServerPluginService;
+
+ protected TestServerCommunicationsService agentServiceContainer;
+
+ protected ResourceType resourceType;
+
+ protected Agent agent;
+
+ protected Resource resource;
+
+ @BeforeMethod
+ public void initServices(Method testMethod) throws Exception {
+ initDriftServer();
+ initAgentServices();
+
+ InitDB annotation = testMethod.getAnnotation(InitDB.class);
+ if (annotation == null || annotation.value()) {
+ initDB();
+ }
+ }
+
+ private void initDriftServer() throws Exception {
+ driftServerPluginService = new DriftServerPluginService();
+ prepareCustomServerPluginService(driftServerPluginService);
+ driftServerPluginService.masterConfig.getPluginDirectory().mkdirs();
+
+ File jpaDriftPlugin = new
File("../plugins/drift-rhq/target/rhq-serverplugin-drift-4.1.0-SNAPSHOT.jar");
+ assertTrue("Drift server plugin JAR file not found at" +
jpaDriftPlugin.getPath(), jpaDriftPlugin.exists());
+ FileUtils.copyFileToDirectory(jpaDriftPlugin,
driftServerPluginService.masterConfig.getPluginDirectory());
+
+ driftServerPluginService.startMasterPluginContainer();
+
+ //serverPluginsMgr = LookupUtil.getServerPlugins();
+ }
+
+ private void initAgentServices() {
+ agentServiceContainer = prepareForTestAgents();
+ agentServiceContainer.driftService = new TestDefService();
+ }
+
+ @AfterMethod(inheritGroups = true)
+ public void shutDownServices() throws Exception {
+ shutDownDriftServer();
+ shutDownAgentServices();
+ }
+
+ private void shutDownDriftServer() throws Exception {
+ unprepareServerPluginService();
+ driftServerPluginService.stopMasterPluginContainer();
+ }
+
+ private void shutDownAgentServices() {
+ agentServiceContainer = null;
+ unprepareForTestAgents();
+ }
+
+ @AfterClass(inheritGroups = true)
+ public void cleanUpDB() throws Exception {
+ purgeDB();
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ purgeDB(getEntityManager());
+ }
+ });
+ }
+
+ private void initDB() throws Exception {
+ purgeDB();
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+ initResourceType();
+ initAgent();
+ initResource();
+
+ em.persist(resourceType);
+ em.persist(agent);
+ resource.setAgent(agent);
+ em.persist(resource);
+
+ initDB(em);
+ }
+ });
+ }
+
+ private void purgeDB() {
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+
+ em.createQuery("delete from JPADrift ").executeUpdate();
+ em.createQuery("delete from
JPADriftChangeSet").executeUpdate();
+ em.createQuery("delete from JPADriftSet").executeUpdate();
+ em.createQuery("delete from JPADriftFile").executeUpdate();
+ em.createQuery("delete from DriftDefinition").executeUpdate();
+ em.createQuery("delete from
DriftDefinitionTemplate").executeUpdate();
+
+ deleteEntity(Resource.class, RESOURCE_NAME, em);
+ deleteEntity(Agent.class, AGENT_NAME, em);
+ deleteEntity(ResourceType.class, RESOURCE_TYPE_NAME, em);
+
+ purgeDB(em);
+ }
+ });
+ }
+
+ protected void purgeDB(EntityManager em) {
+ }
+
+ protected void initDB(EntityManager em) {
+ }
+
+ protected void deleteEntity(Class<?> clazz, String name, EntityManager em) {
+ try {
+ Object entity = em.createQuery(
+ "select entity from " + clazz.getSimpleName() + " entity
where entity.name = :name")
+ .setParameter("name", name)
+ .getSingleResult();
+ em.remove(entity);
+ } catch (NoResultException e) {
+ // we can ignore no results because this code will run when the db
+ // is empty and we expect no results in that case
+ } catch (NonUniqueResultException e) {
+ // we will fail here to let the person running the test know that
+ // the database may not be in a consistent state
+ fail("Purging " + name + " failed. Expected to find one
instance of " + clazz.getSimpleName() +
+ " but found more than one. The database may not be in a consistent
state.");
+ }
+ }
+
+ protected void initResourceType() {
+ resourceType = new ResourceTypeBuilder().createResourceType()
+ .withId(0)
+ .withName(RESOURCE_TYPE_NAME)
+ .withCategory(SERVER)
+ .withPlugin(RESOURCE_TYPE_NAME.toLowerCase())
+ .build();
+ }
+
+ protected void initAgent() {
+ agent = new Agent(AGENT_NAME, "localhost", 1, "", AGENT_NAME
+ "_TOKEN");
+ }
+
+ protected void initResource() {
+ resource = new ResourceBuilder().createResource()
+ .withId(0)
+ .withName(RESOURCE_NAME)
+ .withResourceKey(RESOURCE_NAME)
+ .withRandomUuid()
+ .withResourceType(resourceType)
+ .build();
+ }
+
+ protected Subject getOverlord() {
+ return getSubjectManager().getOverlord();
+ }
+
+ protected String toString(DriftDefinition def) {
+ return "DriftDefinition[id: " + def.getId() + ", name: " +
def.getName() + "]";
+ }
+
+ protected String toString(DriftDefinitionTemplate template) {
+ return DriftDefinitionTemplate.class.getSimpleName() + "[id: " +
template.getId() + ", name: " +
+ template.getName() + "]";
+ }
+
+ protected Drift findDriftByPath(List<? extends Drift> drifts, String path) {
+ for (Drift drift : drifts) {
+ if (drift.getPath().equals(path)) {
+ return drift;
+ }
+ }
+ return null;
+ }
+}
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
new file mode 100644
index 0000000..de93b74
--- /dev/null
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
@@ -0,0 +1,603 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2011 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.drift;
+
+import static java.util.Arrays.asList;
+import static org.rhq.core.domain.common.EntityContext.forResource;
+import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
+import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
+import static org.rhq.core.domain.drift.DriftChangeSetCategory.DRIFT;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.normal;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.plannedChanges;
+import static
org.rhq.core.domain.drift.DriftDefinitionComparator.CompareMode.BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS;
+import static
org.rhq.enterprise.server.safeinvoker.HibernateDetachUtility.SerializationType.SERIALIZATION;
+import static org.rhq.enterprise.server.util.LookupUtil.getDriftManager;
+import static org.rhq.enterprise.server.util.LookupUtil.getDriftTemplateManager;
+import static org.rhq.test.AssertUtils.assertPropertiesMatch;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.ejb.EJBException;
+import javax.persistence.EntityManager;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.criteria.DriftDefinitionCriteria;
+import org.rhq.core.domain.criteria.DriftDefinitionTemplateCriteria;
+import org.rhq.core.domain.criteria.GenericDriftChangeSetCriteria;
+import org.rhq.core.domain.criteria.JPADriftChangeSetCriteria;
+import org.rhq.core.domain.drift.Drift;
+import org.rhq.core.domain.drift.DriftChangeSet;
+import org.rhq.core.domain.drift.DriftDefinition;
+import org.rhq.core.domain.drift.DriftDefinitionComparator;
+import org.rhq.core.domain.drift.DriftDefinitionTemplate;
+import org.rhq.core.domain.drift.DriftSnapshot;
+import org.rhq.core.domain.drift.Filter;
+import org.rhq.core.domain.drift.JPADrift;
+import org.rhq.core.domain.drift.JPADriftChangeSet;
+import org.rhq.core.domain.drift.JPADriftFile;
+import org.rhq.core.domain.drift.JPADriftSet;
+import org.rhq.core.domain.resource.Resource;
+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;
+
+public class DriftTemplateManagerBeanTest extends DriftServerTest {
+
+ private DriftTemplateManagerLocal templateMgr;
+
+ private DriftManagerLocal driftMgr;
+
+ private List<Resource> resources = new LinkedList<Resource>();
+
+ private JPADrift drift1;
+ private JPADrift drift2;
+ private JPADriftFile driftFile1;
+ private JPADriftFile driftFile2;
+
+ @BeforeClass
+ public void initClass() {
+ templateMgr = getDriftTemplateManager();
+ driftMgr = getDriftManager();
+
+ }
+
+ @Override
+ protected void initDB(EntityManager em) {
+ agentServiceContainer.driftService = new TestDefService() {
+ @Override
+ public void unscheduleDriftDetection(int resourceId, DriftDefinition
driftDef) {
+ detach(driftDef);
+ }
+
+ @Override
+ public void updateDriftDetection(int resourceId, DriftDefinition driftDef) {
+ detach(driftDef);
+ }
+
+ @Override
+ public void updateDriftDetection(int resourceId, DriftDefinition driftDef,
DriftSnapshot driftSnapshot) {
+ detach(driftDef);
+ detach(driftSnapshot);
+ }
+
+ private void detach(Object object) {
+ try {
+ HibernateDetachUtility.nullOutUninitializedFields(object,
SERIALIZATION);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ };
+ }
+
+ public void createNewTemplate() {
+ final DriftDefinition definition = new DriftDefinition(new Configuration());
+ definition.setName("test::createNewTemplate");
+ definition.setEnabled(true);
+ definition.setDriftHandlingMode(normal);
+ definition.setInterval(2400L);
+ definition.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+
+ final DriftDefinitionTemplate newTemplate =
templateMgr.createTemplate(getOverlord(), resourceType.getId(),
+ true, definition);
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+
+ ResourceType updatedType = em.find(ResourceType.class,
resourceType.getId());
+
+ assertEquals("Failed to add new drift definition to resource
type", 1, updatedType
+ .getDriftDefinitionTemplates().size());
+
+ DriftDefinitionTemplate expectedTemplate = new
DriftDefinitionTemplate();
+ expectedTemplate.setTemplateDefinition(definition);
+ expectedTemplate.setUserDefined(true);
+
+ assertDriftTemplateEquals("Failed to save template",
expectedTemplate, newTemplate);
+ assertTrue("The template should have its id set",
newTemplate.getId() > 0);
+ }
+ });
+ }
+
+ public void createTemplateForNegativeUpdateTests() {
+ DriftDefinition definition = new DriftDefinition(new Configuration());
+ definition.setName("test::createTemplateForNegativeUpdateTests");
+ definition.setEnabled(true);
+ definition.setDriftHandlingMode(normal);
+ definition.setInterval(2400L);
+ definition.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+
+ templateMgr.createTemplate(getOverlord(), resourceType.getId(), true,
definition);
+
+ assertNotNull("Failed to load template",
loadTemplate(definition.getName()));
+ }
+
+ @Test(dependsOnMethods = "createTemplateForNegativeUpdateTests",
+ expectedExceptions = EJBException.class,
+ expectedExceptionsMessageRegExp = ".*base directory.*cannot be
modified")
+ @InitDB(false)
+ public void doNotAllowBaseDirToBeUpdated() {
+ DriftDefinitionTemplate template =
loadTemplate("test::createTemplateForNegativeUpdateTests");
+ DriftDefinition definition = template.getTemplateDefinition();
+ definition.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/TEST"));
+
+ templateMgr.updateTemplate(getOverlord(), template);
+ }
+
+ @Test(dependsOnMethods = "createTemplateForNegativeUpdateTests",
+ expectedExceptions = EJBException.class,
+ expectedExceptionsMessageRegExp = ".*filters.*cannot be modified")
+ @InitDB(false)
+ public void doNotAllowFiltersToBeUpdated() {
+ DriftDefinitionTemplate template =
loadTemplate("test::createTemplateForNegativeUpdateTests");
+ DriftDefinition definition = template.getTemplateDefinition();
+ definition.addExclude(new Filter("/foo/bar/TEST/conf",
"*.xml"));
+
+ templateMgr.updateTemplate(getOverlord(), template);
+ }
+
+ @Test(dependsOnMethods = "createTemplateForNegativeUpdateTests",
+ expectedExceptions = EJBException.class,
+ expectedExceptionsMessageRegExp = ".*name.*cannot be modified")
+ @InitDB(false)
+ public void doNotAllowTemplateNameToBeUpdated() {
+ DriftDefinitionTemplate template =
loadTemplate("test::createTemplateForNegativeUpdateTests");
+ template.setName("A new name");
+
+ templateMgr.updateTemplate(getOverlord(), template);
+ }
+
+ public void createAndUpdateTemplate() {
+ // create the template
+ DriftDefinition definition = new DriftDefinition(new Configuration());
+ definition.setName("test::updateTemplate");
+ definition.setDescription("update template test");
+ definition.setEnabled(true);
+ definition.setDriftHandlingMode(normal);
+ definition.setInterval(2400L);
+ definition.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+
+ DriftDefinitionTemplate template = templateMgr.createTemplate(getOverlord(),
resourceType.getId(), true,
+ definition);
+
+ // next create some definitions from the template
+ final DriftDefinition attachedDef1 = createDefinition(template,
"attachedDef1", true);
+ final DriftDefinition attachedDef2 = createDefinition(template,
"attachedDef2", true);
+ final DriftDefinition detachedDef1 = createDefinition(template,
"detachedDef1", false);
+ final DriftDefinition detachedDef2 = createDefinition(template,
"detachedDef2", false);
+
+ driftMgr.updateDriftDefinition(getOverlord(), forResource(resource.getId()),
attachedDef1);
+ driftMgr.updateDriftDefinition(getOverlord(), forResource(resource.getId()),
attachedDef2);
+ driftMgr.updateDriftDefinition(getOverlord(), forResource(resource.getId()),
detachedDef1);
+ driftMgr.updateDriftDefinition(getOverlord(), forResource(resource.getId()),
detachedDef2);
+
+ // update the template
+ final DriftDefinition newTemplateDef = template.getTemplateDefinition();
+ newTemplateDef.setInterval(4800L);
+ newTemplateDef.setDriftHandlingMode(plannedChanges);
+ newTemplateDef.setEnabled(false);
+
+ templateMgr.updateTemplate(getOverlord(), template);
+
+ // verify that the tempalte has been updated
+ final DriftDefinitionTemplate updatedTemplate =
loadTemplate(template.getName());
+ AssertUtils.assertPropertiesMatch("Failed to update template",
template, updatedTemplate, "resourceType",
+ "driftDefinitions", "templateDefinition");
+
+ // verify that attached definitions are updated.
+ for (DriftDefinition def : asList(attachedDef1, attachedDef2)) {
+ DriftDefinition updatedDef = loadDefinition(def.getId());
+ String msg = "Failed to propagate update to attached definition " +
toString(updatedDef) + " - ";
+ DriftDefinition updatedTemplateDef =
updatedTemplate.getTemplateDefinition();
+
+ assertEquals(msg + "enabled property not updated",
updatedTemplateDef.isEnabled(),
+ updatedDef.isEnabled());
+ assertEquals(msg + "driftHandlingMode property not updated",
+ updatedTemplateDef.getDriftHandlingMode(),
updatedDef.getDriftHandlingMode());
+ assertEquals(msg + "interval property not updated",
updatedTemplateDef.getInterval(),
+ updatedDef.getInterval());
+ }
+
+ // verify that the detached definitions have not been updated.
+ for (DriftDefinition def : asList(detachedDef1, detachedDef2)) {
+ DriftDefinition defAfterUpdate = loadDefinition(def.getId());
+ String msg = "Detached definition " + toString(def) + " should
not get updated - ";
+
+ assertEquals(msg + "enabled property was modified",
def.isEnabled(), defAfterUpdate.isEnabled());
+ assertEquals(msg + "driftHandlingMode property was modified",
def.getDriftHandlingMode(),
+ defAfterUpdate.getDriftHandlingMode());
+ assertEquals(msg + "interval property was modified",
def.getInterval(), defAfterUpdate.getInterval());
+ }
+ }
+
+
+ @SuppressWarnings("unchecked")
+ public void pinTemplate() throws Exception {
+ // First create the template
+ final DriftDefinition templateDef = new DriftDefinition(new Configuration());
+ templateDef.setName("test::pinTemplate");
+ templateDef.setEnabled(true);
+ templateDef.setDriftHandlingMode(normal);
+ templateDef.setInterval(2400L);
+ templateDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+
+ final DriftDefinitionTemplate template =
templateMgr.createTemplate(getOverlord(),
+ resourceType.getId(), true, templateDef);
+
+ // next create some resource level definitions
+ final DriftDefinition attachedDef1 = createDefinition(template,
"attachedDef1", true);
+ final DriftDefinition attachedDef2 = createDefinition(template,
"attachedDef2", true);
+ final DriftDefinition detachedDef1 = createDefinition(template,
"detachedDef1", false);
+ final DriftDefinition detachedDef2 = createDefinition(template,
"detachedDef2", false);
+
+ // create initial change set from which the snapshot will be generated
+ final JPADriftChangeSet changeSet0 = new JPADriftChangeSet(resource, 0, COVERAGE,
attachedDef1);
+
+ driftFile1 = new JPADriftFile("a1b2c3");
+ drift1 = new JPADrift(changeSet0, "drift.1", FILE_ADDED, null,
driftFile1);
+
+ final JPADriftSet driftSet = new JPADriftSet();
+ driftSet.addDrift(drift1);
+
+ // create change set v1
+ driftFile2 = new JPADriftFile("1a2b3c");
+ final JPADriftChangeSet changeSet1 = new JPADriftChangeSet(resource, 1, DRIFT,
attachedDef1);
+ drift2 = new JPADrift(changeSet1, "drift.2", FILE_ADDED, null,
driftFile2);
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+
+ em.persist(attachedDef1);
+
+ em.persist(driftFile1);
+ em.persist(driftFile2);
+
+ em.persist(changeSet0);
+ em.persist(driftSet);
+ changeSet0.setInitialDriftSet(driftSet);
+ em.merge(changeSet0);
+
+ em.persist(changeSet1);
+ em.persist(drift2);
+
+ em.persist(attachedDef2);
+ em.persist(detachedDef1);
+ em.persist(detachedDef2);
+ }
+ });
+
+ // now we pin the snapshot to the template
+ templateMgr.pinTemplate(getOverlord(), template.getId(), attachedDef1.getId(),
1);
+
+ // verify that the template is now pinned
+ DriftDefinitionTemplate updatedTemplate = loadTemplate(template.getName());
+ assertTrue("Template should be marked pinned",
updatedTemplate.isPinned());
+ }
+
+ @Test(dependsOnMethods = "pinTemplate")
+ @InitDB(false)
+ public void persistChangeSetWhenTemplateGetsPinned() throws Exception {
+ DriftDefinitionTemplate template = loadTemplate("test::pinTemplate");
+
+ GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
+ criteria.addFilterId(template.getChangeSetId());
+
+ PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
+ criteria);
+
+ assertEquals("Expected to find change set for pinned template", 1,
changeSets.size());
+
+ JPADriftChangeSet expectedChangeSet = new JPADriftChangeSet(resource, 1,
COVERAGE, null);
+ List<? extends Drift> expectedDrifts = asList(
+ new JPADrift(expectedChangeSet, "drift.1", FILE_ADDED, null,
driftFile1),
+ new JPADrift(expectedChangeSet, drift2.getPath(), FILE_ADDED, null,
driftFile2));
+
+ DriftChangeSet<?> actualChangeSet = changeSets.get(0);
+ List<? extends Drift> actualDrifts = new
ArrayList(actualChangeSet.getDrifts());
+
+ AssertUtils.assertCollectionMatchesNoOrder(
+ "Expected to find drifts from change sets 1 and 2 in the template change
set",
+ (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "newDriftFile");
+
+ // we need to compare the newDriftFile properties separately because
+ // assertCollectionMatchesNoOrder compares properties via equals() and
JPADriftFile
+ // does not implement equals.
+ assertPropertiesMatch(drift1.getNewDriftFile(), findDriftByPath(actualDrifts,
"drift.1").getNewDriftFile(),
+ "The newDriftFile property was not set correctly for " + drift1);
+ assertPropertiesMatch(drift2.getNewDriftFile(), findDriftByPath(actualDrifts,
"drift.2").getNewDriftFile(),
+ "The newDriftFile property was not set correctly for " + drift1);
+ }
+
+ @Test(dependsOnMethods = "pinTemplate")
+ @InitDB(false)
+ public void updateAttachedDefinitionsWhenTemplateGetsPinned() throws Exception {
+ DriftDefinitionTemplate template = loadTemplate("test::pinTemplate");
+
+ // get the attached definitions
+ List<DriftDefinition> attachedDefs = new
LinkedList<DriftDefinition>();
+ for (DriftDefinition d : template.getDriftDefinitions()) {
+ if (d.isAttached() && (d.getName().equals("attachedDef1")
|| d.getName().equals("attachedDef2"))) {
+ attachedDefs.add(d);
+ }
+ }
+ assertEquals("Failed to get attached definitions for " +
toString(template), 2, attachedDefs.size());
+ assertDefinitionIsPinned(attachedDefs.get(0));
+ assertDefinitionIsPinned(attachedDefs.get(1));
+ }
+
+ @Test(dependsOnMethods = "pinTemplate")
+ @InitDB(false)
+ public void doNotUpdateDetachedDefinitionsWhenTemplateGetsPinned() throws Exception
{
+ DriftDefinitionTemplate template = loadTemplate("test::pinTemplate");
+
+ // get the detached definitions
+ List<DriftDefinition> detachedDefs = new
LinkedList<DriftDefinition>();
+ for (DriftDefinition d : template.getDriftDefinitions()) {
+ if (!d.isAttached() && (d.getName().equals("detachedDef1")
|| d.getName().equals("detachedDef2"))) {
+ detachedDefs.add(d);
+ }
+ }
+ assertEquals("Failed to get detached definitions for " +
toString(template), 2, detachedDefs.size());
+ assertDefinitionIsNotPinned(detachedDefs.get(0));
+ assertDefinitionIsNotPinned(detachedDefs.get(1));
+ }
+
+ public void deleteTemplate() throws Exception {
+ // first create the template
+ final DriftDefinition templateDef = new DriftDefinition(new Configuration());
+ templateDef.setName("test::pinTemplate");
+ templateDef.setEnabled(true);
+ templateDef.setDriftHandlingMode(normal);
+ templateDef.setInterval(2400L);
+ templateDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+
+ final DriftDefinitionTemplate template =
templateMgr.createTemplate(getOverlord(),
+ resourceType.getId(), true, templateDef);
+
+ // next create some resource level definitions
+ final DriftDefinition attachedDef1 = createDefinition(template,
"attachedDef1", true);
+ final DriftDefinition attachedDef2 = createDefinition(template,
"attachedDef2", true);
+ final DriftDefinition detachedDef1 = createDefinition(template,
"detachedDef1", false);
+ final DriftDefinition detachedDef2 = createDefinition(template,
"detachedDef2", false);
+
+ // create some change sets
+ final JPADriftChangeSet changeSet0 = new JPADriftChangeSet(resource, 0, COVERAGE,
attachedDef1);
+
+ driftFile1 = new JPADriftFile("a1b2c3");
+ drift1 = new JPADrift(changeSet0, "drift.1", FILE_ADDED, null,
driftFile1);
+
+ final JPADriftSet driftSet0 = new JPADriftSet();
+ driftSet0.addDrift(drift1);
+
+ final JPADriftChangeSet changeSet1 = new JPADriftChangeSet(resource, 0, DRIFT,
detachedDef1);
+
+ driftFile2 = new JPADriftFile("1a2b3c");
+ drift2 = new JPADrift(changeSet1, "drift.2", FILE_ADDED, null,
driftFile2);
+
+ final JPADriftSet driftSet1 = new JPADriftSet();
+ driftSet1.addDrift(drift2);
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+
+ em.persist(attachedDef1);
+ em.persist(attachedDef2);
+ em.persist(detachedDef1);
+ em.persist(detachedDef2);
+
+ em.persist(driftFile1);
+ em.persist(driftFile2);
+
+ em.persist(changeSet0);
+ em.persist(driftSet0);
+ changeSet0.setInitialDriftSet(driftSet0);
+ em.merge(changeSet0);
+
+ em.persist(changeSet1);
+ em.persist(driftSet1);
+ changeSet1.setInitialDriftSet(driftSet1);
+ em.merge(changeSet1);
+ }
+ });
+
+ // delete the template
+ templateMgr.deleteTemplate(getOverlord(), template.getId());
+
+ // verify that attached definitions along with their change sets have
+ // been deleted
+ assertNull("Change sets belonging to attached definitions should be
deleted", loadChangeSet(changeSet0.getId()));
+ assertNull("Attached definition " + toString(attachedDef1) + "
should be deleted",
+ loadDefinition(attachedDef1.getId()));
+ assertNull("Attached definition " + toString(attachedDef2) + "
should be deleted",
+ loadDefinition(attachedDef2.getId()));
+
+ // verify that detached definitions along with their change sets have not been
deleted
+ assertNotNull("Change sets belonging to detached definitions should not be
deleted",
+ loadChangeSet(changeSet1.getId()));
+ assertDetachedDefinitionNotDeleted(detachedDef1.getId());
+ assertDetachedDefinitionNotDeleted(detachedDef2.getId());
+
+ // verify that the template itself has been deleted
+ assertNull("The template " + toString(template) + " should have
been deleted",
+ loadTemplate(template.getName(), false));
+ }
+
+ private void assertDefinitionIsPinned(DriftDefinition definition) throws Exception {
+ // verify that the definition is marked as pinned
+ assertTrue("Expected " + toString(definition) + " to be
pinned", definition.isPinned());
+
+ // verify that the initial change set is generated for the definition
+ JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
+ criteria.addFilterDriftDefinitionId(definition.getId());
+ criteria.addFilterCategory(COVERAGE);
+ criteria.fetchDrifts(true);
+
+ PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
+ criteria);
+ assertEquals("Expected to find one change set", 1, changeSets.size());
+
+ JPADriftChangeSet expectedChangeSet = new JPADriftChangeSet(resource, 1,
COVERAGE, null);
+ List<? extends Drift> expectedDrifts = asList(
+ new JPADrift(expectedChangeSet, drift1.getPath(), FILE_ADDED, null,
driftFile1),
+ new JPADrift(expectedChangeSet, drift2.getPath(), FILE_ADDED, null,
driftFile2));
+
+ DriftChangeSet<?> actualChangeSet = changeSets.get(0);
+ List<? extends Drift> actualDrifts = new
ArrayList(actualChangeSet.getDrifts());
+
+ AssertUtils.assertCollectionMatchesNoOrder(
+ "Expected to find drifts from change sets 1 and 2 in the template change
set",
+ (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "newDriftFile");
+
+ // Finally make sure that there are no other change sets
+ criteria = new JPADriftChangeSetCriteria();
+ criteria.addFilterStartVersion(1);
+ criteria.addFilterDriftDefinitionId(definition.getId());
+
+ assertEquals("There should not be any drift change sets", 0,
+ driftMgr.findDriftChangeSetsByCriteria(getOverlord(), criteria).size());
+ }
+
+ private void assertDefinitionIsNotPinned(DriftDefinition definition) throws Exception
{
+ // verify that the definition is not pinned
+ assertFalse("Expected " + toString(definition) + " to be
unpinned", definition.isPinned());
+
+ // Note that this method assumes that the definition has no change sets
+ // associated with it and therefore checks that there are no change sets.
+ JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
+ criteria.addFilterDriftDefinitionId(definition.getId());
+
+ PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
+ criteria);
+ assertEquals("Did not expect to find any change sets for " +
toString(definition) + ". Note that this " +
+ "assertion method assumes that the definition you are testing is not
supposed to have any change sets.",
+ 0, changeSets.size());
+ }
+
+ private void assertDriftTemplateEquals(String msg, DriftDefinitionTemplate expected,
DriftDefinitionTemplate actual) {
+ AssertUtils
+ .assertPropertiesMatch(msg + ": basic drift definition template
properties do not match", expected, actual,
+ "id", "resourceType", "ctime",
"templateDefinition");
+ assertDriftDefEquals(msg + ": template definitions do not match",
expected.getTemplateDefinition(), actual
+ .getTemplateDefinition());
+ }
+
+ private void assertDriftDefEquals(String msg, DriftDefinition expected,
DriftDefinition actual) {
+ DriftDefinitionComparator comparator = new DriftDefinitionComparator(
+ BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS);
+ assertEquals(msg, 0, comparator.compare(expected, actual));
+ }
+
+ private void assertDetachedDefinitionNotDeleted(int definitionId) {
+ DriftDefinition definition = loadDefinition(definitionId);
+ assertNotNull("Detached definition " + toString(definition) + "
should not be deleted", definition);
+ assertNull("The detached definition's template reference should be set
to null when the template is deleted",
+ definition.getTemplate());
+ }
+
+ private DriftDefinition createDefinition(DriftDefinitionTemplate template, String
defName, boolean isAttached) {
+ DriftDefinition def = template.createDefinition();
+ def.setName(defName);
+ def.setAttached(isAttached);
+ def.setTemplate(template);
+ def.setResource(resource);
+ return def;
+ }
+
+ private DriftDefinitionTemplate loadTemplate(String name) {
+ return loadTemplate(name, true);
+ }
+
+ private DriftDefinitionTemplate loadTemplate(String name, boolean
verifyResultsUnique) {
+ DriftDefinitionTemplateCriteria criteria = new
DriftDefinitionTemplateCriteria();
+ criteria.addFilterResourceTypeId(resourceType.getId());
+ criteria.addFilterName(name);
+ criteria.fetchDriftDefinitions(true);
+
+ PageList<DriftDefinitionTemplate> templates =
templateMgr.findTemplatesByCriteria(getOverlord(), criteria);
+ if (verifyResultsUnique) {
+ assertEquals("Expected to find one template", 1,
templates.size());
+ }
+
+ if (templates.isEmpty()) {
+ return null;
+ }
+ return templates.get(0);
+ }
+
+ private DriftDefinition loadDefinition(int definitionId) {
+ DriftDefinitionCriteria criteria = new DriftDefinitionCriteria();
+ criteria.addFilterId(definitionId);
+ criteria.fetchConfiguration(true);
+ criteria.fetchTemplate(true);
+ PageList<DriftDefinition> definitions =
driftMgr.findDriftDefinitionsByCriteria(getOverlord(), criteria);
+
+ if (definitions.isEmpty()) {
+ return null;
+ }
+ return definitions.get(0);
+ }
+
+ private DriftChangeSet<?> loadChangeSet(String id) throws Exception {
+ GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
+ criteria.addFilterId(id);
+ PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
+ criteria);
+
+ if (changeSets.isEmpty()) {
+ return null;
+ }
+ return changeSets.get(0);
+ }
+
+}
diff --git
a/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/InitDB.java
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/InitDB.java
new file mode 100644
index 0000000..65a6523
--- /dev/null
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/InitDB.java
@@ -0,0 +1,32 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2011 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.drift;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+@Retention(RUNTIME)
+(a)Target({ElementType.METHOD })
+public @interface InitDB {
+ boolean value() default true;
+}
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
new file mode 100644
index 0000000..4faca1b
--- /dev/null
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
@@ -0,0 +1,309 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2011 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.drift;
+
+import static java.util.Arrays.asList;
+import static org.apache.commons.io.IOUtils.toInputStream;
+import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
+import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.normal;
+import static org.rhq.core.domain.drift.DriftFileStatus.LOADED;
+import static org.rhq.enterprise.server.util.LookupUtil.getJPADriftServer;
+import static org.rhq.test.AssertUtils.assertPropertiesMatch;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.persistence.EntityManager;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.criteria.JPADriftChangeSetCriteria;
+import org.rhq.core.domain.drift.Drift;
+import org.rhq.core.domain.drift.DriftDefinition;
+import org.rhq.core.domain.drift.JPADrift;
+import org.rhq.core.domain.drift.JPADriftChangeSet;
+import org.rhq.core.domain.drift.JPADriftFile;
+import org.rhq.core.domain.drift.JPADriftSet;
+import org.rhq.core.domain.drift.dto.DriftChangeSetDTO;
+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;
+
+public class JPADriftServerBeanTest extends DriftServerTest {
+
+ private JPADriftServerLocal jpaDriftServer;
+
+ private final String DRIFT_FILE_1_ID = "a1b2c3d4";
+
+ private final String DRIFT_FILE_2_ID = "1ab2b3c4d";
+
+ private JPADriftFile driftFile1;
+
+ private JPADriftFile driftFile2;
+
+ @BeforeClass
+ public void initTests() {
+ jpaDriftServer = getJPADriftServer();
+ }
+
+ @BeforeMethod
+ public void persistDriftFiles() throws Exception {
+ driftFile1 = jpaDriftServer.persistDriftFile(new JPADriftFile(DRIFT_FILE_1_ID));
+ driftFile2 = jpaDriftServer.persistDriftFile(new JPADriftFile(DRIFT_FILE_2_ID));
+
+ String driftFile1Content = "drift file 1 content...";
+ String driftFile2Content = "drift file 2 content...";
+
+ jpaDriftServer.persistDriftFileData(driftFile1, toInputStream(driftFile1Content),
driftFile1Content.length());
+ jpaDriftServer.persistDriftFileData(driftFile2, toInputStream(driftFile2Content),
driftFile2Content.length());
+
+ driftFile1 = jpaDriftServer.getDriftFile(getOverlord(), DRIFT_FILE_1_ID);
+ driftFile2 = jpaDriftServer.getDriftFile(getOverlord(), DRIFT_FILE_2_ID);
+
+ assertDriftFilePersisted(driftFile1, "driftFile1", driftFile1Content);
+ assertDriftFilePersisted(driftFile2, "driftFile2", driftFile2Content);
+ }
+
+ public void persistResourceChangeSet() {
+ // first create and persist the drift definition
+ final DriftDefinition driftDef = new DriftDefinition(new Configuration());
+ driftDef.setName("test::persistResourceChangeSet");
+ driftDef.setEnabled(true);
+ driftDef.setDriftHandlingMode(normal);
+ driftDef.setInterval(2400L);
+ driftDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+ driftDef.setResource(resource);
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+ em.persist(driftDef);
+ }
+ });
+
+ // create the change set to be persisted
+ DriftChangeSetDTO changeSet = new DriftChangeSetDTO();
+ changeSet.setCategory(COVERAGE);
+ changeSet.setVersion(1);
+ changeSet.setDriftDefinitionId(driftDef.getId());
+ changeSet.setResourceId(resource.getId());
+ changeSet.setDriftHandlingMode(normal);
+ changeSet.setCtime(System.currentTimeMillis());
+
+ DriftDTO drift1 = new DriftDTO();
+ drift1.setCategory(FILE_ADDED);
+ drift1.setPath("drift.1");
+ drift1.setChangeSet(changeSet);
+ drift1.setCtime(System.currentTimeMillis());
+ drift1.setNewDriftFile(toDTo(driftFile1));
+
+ DriftDTO drift2 = new DriftDTO();
+ drift2.setCategory(FILE_ADDED);
+ drift2.setPath("drift.2");
+ drift2.setChangeSet(changeSet);
+ drift2.setCtime(System.currentTimeMillis());
+ drift2.setNewDriftFile(toDTo(driftFile2));
+
+ Set<DriftDTO> drifts = new HashSet<DriftDTO>();
+ drifts.add(drift1);
+ drifts.add(drift2);
+ changeSet.setDrifts(drifts);
+
+ String newChangeSetId = jpaDriftServer.persistChangeSet(getOverlord(),
changeSet);
+
+ // verify that the change set was persisted
+ JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
+ criteria.addFilterId(newChangeSetId);
+ criteria.fetchDrifts(true);
+
+ PageList<JPADriftChangeSet> changeSets =
jpaDriftServer.findDriftChangeSetsByCriteria(getOverlord(), criteria);
+ assertEquals("Expected to find one change set", 1, changeSets.size());
+
+ JPADriftChangeSet jpaChangeSet = changeSets.get(0);
+ assertEquals("Expected change set to contain two drifts. This could be a
result of the change set not being " +
+ "persisted correctly or the criteria fetch being done
incorrectly.", 2, jpaChangeSet.getDrifts().size());
+
+ AssertUtils
+ .assertPropertiesMatch("The change set was not persisted correctly",
changeSet, jpaChangeSet, "id", "drifts",
+ "class", "ctime");
+
+ List<? extends Drift> expectedDrifts = asList(drift1, drift2);
+ List<? extends Drift> actualDrifts = new
ArrayList(jpaChangeSet.getDrifts());
+
+ // We ignore the id and ctime properties because those are set by
JPADriftServerBean
+ // and are somewhat implmentation specific. We ignore the directory property
because
+ // it is really a calculated property. newDriftFile has to be compared
separately
+ // since it does not implement equals.
+ AssertUtils.assertCollectionMatchesNoOrder("The change set drifts were not
persisted correctly",
+ (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "directory",
+ "newDriftFile", "class");
+
+ assertPropertiesMatch("The newDriftFile property was not set correctly for
" + drift1, drift1.getNewDriftFile(),
+ findDriftByPath(actualDrifts, "drift.1").getNewDriftFile(),
"class", "ctime") ;
+ assertPropertiesMatch("The newDriftFile property was not set correctly for
" + drift2, drift2.getNewDriftFile(),
+ findDriftByPath(actualDrifts, "drift.2").getNewDriftFile(),
"class", "ctime") ;
+ }
+
+ public void persistTemplateChangeSet() {
+ // create the change set to be persisted
+ //
+ // Note that we do not set the drift definition id or resource id since
+ // the change set is not owned by a resource. It is owned by the
+ // resource type.
+ DriftChangeSetDTO changeSet = new DriftChangeSetDTO();
+ changeSet.setCategory(COVERAGE);
+ changeSet.setVersion(1);
+ changeSet.setDriftHandlingMode(normal);
+ changeSet.setCtime(System.currentTimeMillis());
+
+ DriftDTO drift1 = new DriftDTO();
+ drift1.setCategory(FILE_ADDED);
+ drift1.setPath("drift.1");
+ drift1.setChangeSet(changeSet);
+ drift1.setCtime(System.currentTimeMillis());
+ drift1.setNewDriftFile(toDTo(driftFile1));
+
+ DriftDTO drift2 = new DriftDTO();
+ drift2.setCategory(FILE_ADDED);
+ drift2.setPath("drift.2");
+ drift2.setChangeSet(changeSet);
+ drift2.setCtime(System.currentTimeMillis());
+ drift2.setNewDriftFile(toDTo(driftFile2));
+
+ Set<DriftDTO> drifts = new HashSet<DriftDTO>();
+ drifts.add(drift1);
+ drifts.add(drift2);
+ changeSet.setDrifts(drifts);
+
+ String newChangeSetId = jpaDriftServer.persistChangeSet(getOverlord(),
changeSet);
+
+ // verify that the change set was persisted
+ JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
+ criteria.addFilterId(newChangeSetId);
+ criteria.fetchDrifts(true);
+
+ PageList<JPADriftChangeSet> changeSets =
jpaDriftServer.findDriftChangeSetsByCriteria(getOverlord(), criteria);
+ assertEquals("Expected to find one change set", 1, changeSets.size());
+
+ JPADriftChangeSet jpaChangeSet = changeSets.get(0);
+ assertEquals("Expected change set to contain two drifts. This could be a
result of the change set not being " +
+ "persisted correctly or the criteria fetch being done
incorrectly.", 2, jpaChangeSet.getDrifts().size());
+
+ AssertUtils
+ .assertPropertiesMatch("The change set was not persisted correctly",
changeSet, jpaChangeSet, "id", "drifts",
+ "class", "ctime");
+
+ List<? extends Drift> expectedDrifts = asList(drift1, drift2);
+ List<? extends Drift> actualDrifts = new
ArrayList(jpaChangeSet.getDrifts());
+
+ // We ignore the id and ctime properties because those are set by
JPADriftServerBean
+ // and are somewhat implmentation specific. We ignore the directory property
because
+ // it is really a calculated property. newDriftFile has to be compared
separately
+ // since it does not implement equals.
+ AssertUtils.assertCollectionMatchesNoOrder("The change set drifts were not
persisted correctly",
+ (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "directory",
+ "newDriftFile", "class");
+
+ assertPropertiesMatch("The newDriftFile property was not set correctly for
" + drift1, drift1.getNewDriftFile(),
+ findDriftByPath(actualDrifts, "drift.1").getNewDriftFile(),
"class", "ctime") ;
+ assertPropertiesMatch("The newDriftFile property was not set correctly for
" + drift2, drift2.getNewDriftFile(),
+ findDriftByPath(actualDrifts, "drift.2").getNewDriftFile(),
"class", "ctime") ;
+ }
+
+ public void copyChangeSet() {
+ // first create the change set that will be copied
+ final JPADriftChangeSet changeSet = new JPADriftChangeSet(null, 0, COVERAGE,
null);
+ changeSet.setDriftHandlingMode(normal);
+
+ final JPADrift drift1 = new JPADrift(changeSet, "drift.1", FILE_ADDED,
null, driftFile1);
+ final JPADrift drift2 = new JPADrift(changeSet, "drift.2", FILE_ADDED,
null, driftFile2);
+
+ final JPADriftSet driftSet = new JPADriftSet();
+ driftSet.addDrift(drift1);
+ driftSet.addDrift(drift2);
+
+ // next create the drift definition
+ final DriftDefinition driftDef = new DriftDefinition(new Configuration());
+ driftDef.setName("test::copyChangeSet");
+ driftDef.setEnabled(true);
+ driftDef.setDriftHandlingMode(normal);
+ driftDef.setInterval(2400L);
+ driftDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+ driftDef.setResource(resource);
+
+ // persist the change set and drift definition
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+ em.persist(changeSet);
+ em.persist(driftDef);
+ em.persist(driftSet);
+ changeSet.setInitialDriftSet(driftSet);
+ em.merge(changeSet);
+ }
+ });
+
+ jpaDriftServer.copyChangeSet(getOverlord(), changeSet.getId(), driftDef.getId(),
resource.getId());
+
+ // verify that the change set was created for the definition
+ JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
+ criteria.addFilterDriftDefinitionId(driftDef.getId());
+ criteria.addFilterCategory(COVERAGE);
+
+ PageList<JPADriftChangeSet> changeSets =
jpaDriftServer.findDriftChangeSetsByCriteria(getOverlord(), criteria);
+
+ assertEquals("Expected to get back one change set",
1,changeSets.size());
+
+ JPADriftChangeSet newChangeSet = changeSets.get(0);
+ Set<JPADrift> expectedDrifts = new HashSet<JPADrift>(asList(drift1,
drift2));
+ Set<JPADrift> actualDrifts = newChangeSet.getDrifts();
+
+ AssertUtils.assertCollectionMatchesNoOrder("The change set drifts were not
copied correctly", expectedDrifts,
+ actualDrifts,
+ "changeSet", "newDriftFile");
+ }
+
+ private DriftFileDTO toDTo(JPADriftFile driftFile) {
+ DriftFileDTO dto = new DriftFileDTO();
+ dto.setHashId(driftFile.getHashId());
+ dto.setDataSize(driftFile.getDataSize());
+ dto.setStatus(driftFile.getStatus());
+ return dto;
+ }
+
+
+ private void assertDriftFilePersisted(JPADriftFile driftFile, String name, String
content) {
+ assertNotNull("Failed to get " + name + " Was it persisted?",
driftFile);
+ assertEquals("The content for " + name + " is wrong",
content, jpaDriftServer.getDriftFileBits(
+ driftFile.getHashId()));
+ assertEquals("The drift file status is wrong", LOADED,
driftFile.getStatus());
+ }
+
+}
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
new file mode 100644
index 0000000..66afcb0
--- /dev/null
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
@@ -0,0 +1,223 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2011 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.drift;
+
+import static java.util.Arrays.asList;
+import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
+import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.normal;
+import static
org.rhq.core.domain.drift.DriftDefinitionComparator.CompareMode.BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS;
+import static org.rhq.enterprise.server.util.LookupUtil.getDriftManager;
+import static org.rhq.enterprise.server.util.LookupUtil.getDriftTemplateManager;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import javax.persistence.EntityManager;
+
+import org.testng.annotations.BeforeClass;
+
+import org.rhq.core.domain.common.EntityContext;
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.criteria.DriftDefinitionCriteria;
+import org.rhq.core.domain.criteria.JPADriftChangeSetCriteria;
+import org.rhq.core.domain.drift.Drift;
+import org.rhq.core.domain.drift.DriftChangeSet;
+import org.rhq.core.domain.drift.DriftConfigurationDefinition;
+import org.rhq.core.domain.drift.DriftDefinition;
+import org.rhq.core.domain.drift.DriftDefinitionComparator;
+import org.rhq.core.domain.drift.DriftDefinitionTemplate;
+import org.rhq.core.domain.drift.DriftSnapshot;
+import org.rhq.core.domain.drift.JPADrift;
+import org.rhq.core.domain.drift.JPADriftChangeSet;
+import org.rhq.core.domain.drift.JPADriftFile;
+import org.rhq.core.domain.drift.JPADriftSet;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.server.safeinvoker.HibernateDetachUtility;
+import org.rhq.test.AssertUtils;
+import org.rhq.test.TransactionCallback;
+
+public class ManageDriftDefinitionsTest extends DriftServerTest {
+
+ private DriftManagerLocal driftMgr;
+
+ private DriftTemplateManagerLocal templateMgr;
+
+ @BeforeClass
+ public void initClass() throws Exception {
+ driftMgr = getDriftManager();
+ templateMgr = getDriftTemplateManager();
+ }
+
+ public void createDefinitionFromUnpinnedTemplate() {
+ // first create a template
+ final DriftDefinition templateDef = new DriftDefinition(new Configuration());
+ templateDef.setName("test_createUnpinnedDefinition");
+ templateDef.setEnabled(true);
+ templateDef.setDriftHandlingMode(normal);
+ templateDef.setInterval(2400L);
+ templateDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+
+ // persist the template
+ DriftDefinitionTemplate template = templateMgr.createTemplate(getOverlord(),
resourceType.getId(), false,
+ templateDef);
+
+ // create and persist the definition
+ DriftDefinition definition = template.createDefinition();
+ definition.setTemplate(template);
+ driftMgr.updateDriftDefinition(getOverlord(),
EntityContext.forResource(resource.getId()), definition);
+
+ // verify that the definition was created
+ DriftDefinition newDef = loadDefinition(definition.getName());
+ DriftDefinitionComparator comparator = new DriftDefinitionComparator(
+ BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS);
+
+ assertEquals("The drift definition was not persisted correctly", 0,
comparator.compare(definition, newDef));
+ assertEquals("The template association was not set on the definition",
template, newDef.getTemplate());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void createDefinitionFromPinnedTemplate() throws Exception {
+ // We first need to create a pinned template. Users can only create a pinned
+ // template from a snapshot of an existing resource-level drift definition.
+ // We are going to take a bit of a short cut though by directly creating
+ // and persisting the pinned change set.
+
+ // first create the change set
+ final JPADriftChangeSet changeSet0 = new JPADriftChangeSet(null, 0, COVERAGE,
null);
+
changeSet0.setDriftHandlingMode(DriftConfigurationDefinition.DriftHandlingMode.normal);
+
+ final JPADriftFile driftFile1 = new JPADriftFile("a1b2c3");
+ final JPADriftFile driftFile2 = new JPADriftFile("1a2b3c");
+
+ JPADrift drift1 = new JPADrift(changeSet0, "drift.1", FILE_ADDED, null,
driftFile1);
+ JPADrift drift2 = new JPADrift(changeSet0, "drift.2", FILE_ADDED, null,
driftFile2);
+
+ final JPADriftSet driftSet = new JPADriftSet();
+ driftSet.addDrift(drift1);
+ driftSet.addDrift(drift2);
+
+ // create the template
+ final DriftDefinition templateDef = new DriftDefinition(new Configuration());
+ templateDef.setName("test_createUnpinnedDefinition");
+ templateDef.setEnabled(true);
+ templateDef.setDriftHandlingMode(normal);
+ templateDef.setInterval(2400L);
+ templateDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+ templateDef.setPinned(true);
+
+ final DriftDefinitionTemplate template =
templateMgr.createTemplate(getOverlord(), resourceType.getId(), true,
+ templateDef);
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+
+ em.persist(driftFile1);
+ em.persist(driftFile2);
+ em.persist(changeSet0);
+ em.persist(driftSet);
+ changeSet0.setInitialDriftSet(driftSet);
+ em.merge(changeSet0);
+
+ // setting the change set id on the template is the last and the
+ // most important step in making the template pinned
+ template.setChangeSetId(changeSet0.getId());
+ em.merge(template);
+ }
+ });
+
+ // Create and persist a resource-level definition.
+ final DriftDefinition definition = template.createDefinition();
+ definition.setTemplate(template);
+
+ final AtomicBoolean agentInvoked = new AtomicBoolean(false);
+
+ agentServiceContainer.driftService = new TestDefService() {
+ @Override
+ public void updateDriftDetection(int resourceId, DriftDefinition driftDef,
DriftSnapshot snapshot) {
+ try {
+ HibernateDetachUtility.nullOutUninitializedFields(driftDef,
+ HibernateDetachUtility.SerializationType.SERIALIZATION);
+ HibernateDetachUtility.nullOutUninitializedFields(snapshot,
+ HibernateDetachUtility.SerializationType.SERIALIZATION);
+ agentInvoked.set(true);
+ assertNotNull("Expected snapshot drift instances collection to
be non-null",
+ snapshot.getDriftInstances());
+ assertEquals("Expected snapshot to contain two drift
entries", 2, snapshot.getDriftInstances().size());
+ } catch (Exception e) {
+ String msg = "Do not pass attached entites to agent since those
entities are outside of " +
+ "Hibernate's control. The persistence context should be
flushed and cleared to ensure that " +
+ "only detached objects are sent to the agent";
+ throw new RuntimeException(msg, e);
+ }
+ }
+ };
+
+ driftMgr.updateDriftDefinition(getOverlord(),
EntityContext.forResource(resource.getId()), definition);
+
+ DriftDefinition newDef = loadDefinition(definition.getName());
+
+ // verify that the definition is marked as pinned
+ assertTrue("The drift definition should be marked as pinned",
newDef.isPinned());
+
+ // verify that the initial change set is generated for the definition
+ JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
+ criteria.addFilterDriftDefinitionId(definition.getId());
+ criteria.addFilterCategory(COVERAGE);
+ criteria.fetchDrifts(true);
+
+ PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
+ criteria);
+ assertEquals("Expected to find one change set", 1, changeSets.size());
+
+ JPADriftChangeSet expectedChangeSet = new JPADriftChangeSet(resource, 1,
COVERAGE, null);
+ List<? extends Drift> expectedDrifts = asList(
+ new JPADrift(expectedChangeSet, drift1.getPath(), FILE_ADDED, null,
driftFile1),
+ new JPADrift(expectedChangeSet, drift2.getPath(), FILE_ADDED, null,
driftFile2));
+
+ DriftChangeSet<?> actualChangeSet = changeSets.get(0);
+ List<? extends Drift> actualDrifts = new
ArrayList(actualChangeSet.getDrifts());
+
+ AssertUtils.assertCollectionMatchesNoOrder(
+ "Expected to find drifts from change sets 1 and 2 in the template change
set",
+ (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "newDriftFile");
+
+ // lastly verify that the agent is called
+ assertTrue("Failed to send drift definition along with snapshot to
agent", agentInvoked.get());
+ }
+
+ private DriftDefinition loadDefinition(String name) {
+ DriftDefinitionCriteria criteria = new DriftDefinitionCriteria();
+ criteria.addFilterResourceIds(resource.getId());
+ criteria.addFilterName(name);
+ criteria.fetchConfiguration(true);
+ criteria.fetchResource(true);
+ criteria.fetchTemplate(true);
+
+ PageList<DriftDefinition> driftDefs =
driftMgr.findDriftDefinitionsByCriteria(getOverlord(), criteria);
+ assertEquals("Expected to find one drift definition", 1,
driftDefs.size());
+
+ return driftDefs.get(0);
+ }
+}
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
new file mode 100644
index 0000000..e7341e4
--- /dev/null
+++
b/modules/enterprise/server/itests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
@@ -0,0 +1,236 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2011 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.drift;
+
+import static java.util.Arrays.asList;
+import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
+import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
+import static org.rhq.core.domain.drift.DriftChangeSetCategory.DRIFT;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.normal;
+import static org.rhq.enterprise.server.util.LookupUtil.getDriftManager;
+import static org.rhq.enterprise.server.util.LookupUtil.getDriftTemplateManager;
+import static org.rhq.test.AssertUtils.assertPropertiesMatch;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import javax.persistence.EntityManager;
+
+import org.testng.annotations.BeforeClass;
+
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.criteria.GenericDriftChangeSetCriteria;
+import org.rhq.core.domain.drift.Drift;
+import org.rhq.core.domain.drift.DriftChangeSet;
+import org.rhq.core.domain.drift.DriftDefinition;
+import org.rhq.core.domain.drift.DriftSnapshot;
+import org.rhq.core.domain.drift.JPADrift;
+import org.rhq.core.domain.drift.JPADriftChangeSet;
+import org.rhq.core.domain.drift.JPADriftFile;
+import org.rhq.core.domain.drift.JPADriftSet;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.core.server.EntitySerializer;
+import org.rhq.test.AssertUtils;
+import org.rhq.test.TransactionCallback;
+
+public class ManageSnapshotsTest extends DriftServerTest {
+
+ private DriftManagerLocal driftMgr;
+
+ private DriftTemplateManagerLocal templateMgr;
+
+ @BeforeClass(inheritGroups = true)
+ public void initClass() throws Exception {
+ driftMgr = getDriftManager();
+ templateMgr = getDriftTemplateManager();
+ }
+
+ public void pinningSnapshotShouldSetDriftDefAsPinned() {
+ final DriftDefinition driftDef =
createAndPersistDriftDef("test::setPinnedFlag");
+
+ // create initial change set
+ final JPADriftChangeSet changeSet = new JPADriftChangeSet(resource, 0, COVERAGE,
driftDef);
+
+ final JPADriftFile driftFile1 = new JPADriftFile("a1b2c3");
+ JPADrift drift = new JPADrift(changeSet, "drift.1", FILE_ADDED, null,
driftFile1);
+
+ final JPADriftSet driftSet = new JPADriftSet();
+ driftSet.addDrift(drift);
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+ em.persist(driftFile1);
+ em.persist(changeSet);
+ em.persist(driftSet);
+ changeSet.setInitialDriftSet(driftSet);
+ em.merge(changeSet);
+ }
+ });
+
+ driftMgr.pinSnapshot(getOverlord(), driftDef.getId(), 0);
+ DriftDefinition updatedDriftDef = driftMgr.getDriftDefinition(getOverlord(),
driftDef.getId());
+
+ assertNotNull("Failed to get " + toString(driftDef), updatedDriftDef);
+ assertTrue("Failed to set pinned flag of " + toString(driftDef),
updatedDriftDef.isPinned());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void pinningSnapshotShouldMakeSnapshotTheInitialChangeSet() throws Exception
{
+ final DriftDefinition driftDef =
createAndPersistDriftDef("test::makeSnapshotVersionZero");
+
+ // create initial change set
+ final JPADriftChangeSet changeSet0 = new JPADriftChangeSet(resource, 0, COVERAGE,
driftDef);
+
+ final JPADriftFile driftFile1 = new JPADriftFile("a1b2c3");
+ JPADrift drift1 = new JPADrift(changeSet0, "drift.1", FILE_ADDED, null,
driftFile1);
+
+ final JPADriftSet driftSet = new JPADriftSet();
+ driftSet.addDrift(drift1);
+
+ // create change set v1
+ final JPADriftFile driftFile2 = new JPADriftFile("1a2b3c");
+ final JPADriftChangeSet changeSet1 = new JPADriftChangeSet(resource, 1, DRIFT,
driftDef);
+ final JPADrift drift2 = new JPADrift(changeSet1, "drift.2", FILE_ADDED,
null, driftFile2);
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+ em.persist(driftFile1);
+ em.persist(driftFile2);
+ em.persist(changeSet0);
+ em.persist(driftSet);
+ changeSet0.setInitialDriftSet(driftSet);
+ em.merge(changeSet0);
+ em.persist(changeSet1);
+ em.persist(drift2);
+ }
+ });
+
+ driftMgr.pinSnapshot(getOverlord(), driftDef.getId(), 1);
+
+ // Verify that there is now only one change set for the drift def
+ GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
+ criteria.addFilterDriftDefinitionId(driftDef.getId());
+
+ PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
+ criteria);
+ assertEquals("All change sets except the change set representing the pinned
snapshot should be removed",
+ 1, changeSets.size());
+ DriftChangeSet<?> changeSet = changeSets.get(0);
+
+ assertEquals("The pinned snapshot version should be reset to zero", 0,
changeSet.getVersion());
+ assertEquals("The change set category is wrong", COVERAGE,
changeSet.getCategory());
+
+ JPADriftChangeSet expectedChangeSet = new JPADriftChangeSet(resource, 1,
COVERAGE, driftDef);
+ List<? extends Drift> expectedDrifts = asList(
+ new JPADrift(expectedChangeSet, drift1.getPath(), FILE_ADDED, null,
driftFile1),
+ new JPADrift(expectedChangeSet, drift2.getPath(), FILE_ADDED, null,
driftFile2));
+
+ List<? extends Drift> actualDrifts = new ArrayList(changeSet.getDrifts());
+
+ AssertUtils.assertCollectionMatchesNoOrder(
+ "Expected to find drifts from change sets 1 and 2 in the new initial
change set",
+ (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "newDriftFile");
+
+ // we need to compare the newDriftFile properties separately because
+ // assertCollectionMatchesNoOrder compares properties via equals() and
JPADriftFile
+ // does not implement equals.
+ assertPropertiesMatch(drift1.getNewDriftFile(), findDriftByPath(actualDrifts,
"drift.1").getNewDriftFile(),
+ "The newDriftFile property was not set correctly for " + drift1);
+ assertPropertiesMatch(drift2.getNewDriftFile(), findDriftByPath(actualDrifts,
"drift.2").getNewDriftFile(),
+ "The newDriftFile property was not set correctly for " + drift1);
+ }
+
+ public void pinningSnapshotShouldSendRequestToAgent() {
+ final DriftDefinition driftDef =
createAndPersistDriftDef("test::setPinnedFlag");
+
+ // create initial change set
+ final JPADriftChangeSet changeSet = new JPADriftChangeSet(resource, 0, COVERAGE,
driftDef);
+
+ final JPADriftFile driftFile1 = new JPADriftFile("a1b2c3");
+ JPADrift drift = new JPADrift(changeSet, "drift.1", FILE_ADDED, null,
driftFile1);
+
+ final JPADriftSet driftSet = new JPADriftSet();
+ driftSet.addDrift(drift);
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+ em.persist(driftFile1);
+ em.persist(changeSet);
+ em.persist(driftSet);
+ changeSet.setInitialDriftSet(driftSet);
+ em.merge(changeSet);
+ }
+ });
+
+ final AtomicBoolean agentInvoked = new AtomicBoolean(false);
+ agentServiceContainer.driftService = new TestDefService() {
+ @Override
+ public void pinSnapshot(int resourceId, String configName, DriftSnapshot
snapshot) {
+ try {
+ agentInvoked.set(true);
+ // serialize the method arguments here to more closely simulate what
+ // happens during the call. We cannot send hibernate-proxied objects
+ // to the agent. This is an attempt to catch that.
+ ObjectOutputStream stream = new ObjectOutputStream(new
ByteArrayOutputStream());
+ EntitySerializer.writeExternalRemote(resourceId, stream);
+ EntitySerializer.writeExternalRemote(configName, stream);
+ EntitySerializer.writeExternalRemote(snapshot, stream);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ };
+
+ driftMgr.pinSnapshot(getOverlord(), driftDef.getId(), 0);
+
+ assertTrue("Failed to send request to agent to pin snapshot",
agentInvoked.get());
+ }
+
+ private DriftDefinition createAndPersistDriftDef(String name) {
+ final DriftDefinition driftDef = new DriftDefinition(new Configuration());
+ driftDef.setName(name);
+ driftDef.setEnabled(true);
+ driftDef.setDriftHandlingMode(normal);
+ driftDef.setInterval(1800L);
+ driftDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ driftDef.setResource(resource);
+ getEntityManager().persist(driftDef);
+ }
+ });
+
+ return driftDef;
+ }
+
+}
diff --git a/modules/enterprise/server/itests/src/test/resources/META-INF/ejb-jar.xml
b/modules/enterprise/server/itests/src/test/resources/META-INF/ejb-jar.xml
new file mode 100644
index 0000000..8222948
--- /dev/null
+++ b/modules/enterprise/server/itests/src/test/resources/META-INF/ejb-jar.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar
xmlns="http://java.sun.com/xml/ns/javaee"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+ version="3.0">
+
+ <description>RHQ</description>
+ <display-name>RHQ</display-name>
+
+ <assembly-descriptor>
+
+ <!-- all our EJB3 SLSBs can define custom @RequiredPermissions annotations for
authorization checks-->
+ <interceptor-binding>
+ <ejb-name>*</ejb-name>
+
<interceptor-class>org.rhq.enterprise.server.authz.RequiredPermissionsInterceptor</interceptor-class>
+ </interceptor-binding>
+ <interceptor-binding>
+ <ejb-name>*</ejb-name>
+
<interceptor-class>org.rhq.enterprise.server.common.TransactionInterruptInterceptor</interceptor-class>
+ </interceptor-binding>
+ <interceptor-binding>
+ <ejb-name>*</ejb-name>
+
<interceptor-class>org.rhq.enterprise.server.common.PerformanceMonitorInterceptor</interceptor-class>
+ </interceptor-binding>
+
+ </assembly-descriptor>
+
+</ejb-jar>
diff --git a/modules/enterprise/server/itests/src/test/resources/binary-blob-sample.jar
b/modules/enterprise/server/itests/src/test/resources/binary-blob-sample.jar
new file mode 100644
index 0000000..0a629ec
Binary files /dev/null and
b/modules/enterprise/server/itests/src/test/resources/binary-blob-sample.jar differ
diff --git
a/modules/enterprise/server/itests/src/test/resources/default.persistence.properties
b/modules/enterprise/server/itests/src/test/resources/default.persistence.properties
new file mode 100644
index 0000000..8e4f317
--- /dev/null
+++ b/modules/enterprise/server/itests/src/test/resources/default.persistence.properties
@@ -0,0 +1,22 @@
+hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup
+#hibernate.connection.release_mode=after_statement
+#hibernate.transaction.flush_before_completion=false
+#hibernate.transaction.auto_close_session=false
+#hibernate.query.factory_class=org.hibernate.hql.ast.ASTQueryTranslatorFactory
+#hibernate.hbm2ddl.auto=create-drop
+#hibernate.hbm2ddl.auto=create
+hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
+# Clustered cache with TreeCache
+#hibernate.cache.provider_class=org.jboss.ejb3.entity.TreeCacheProviderHook
+#hibernate.treecache.mbean.object_name=jboss.cache:service=EJB3EntityTreeCache
+#hibernate.dialect=org.hibernate.dialect.HSQLDialect
+hibernate.jndi.java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
+hibernate.jndi.java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
+hibernate.bytecode.use_reflection_optimizer=false
+# I don't think this is honored, but EJB3Deployer uses it
+hibernate.bytecode.provider=javassist
+hibernate.jdbc.use_streams_for_binary=true
+hibernate.show_sql=false
+hibernate.format_sql=true
+hibernate.default_batch_fetch_size=16
+hibernate.jdbc.batch_size=20
diff --git a/modules/enterprise/server/itests/src/test/resources/ejb3-interceptors-aop.xml
b/modules/enterprise/server/itests/src/test/resources/ejb3-interceptors-aop.xml
new file mode 100644
index 0000000..f30aa70
--- /dev/null
+++ b/modules/enterprise/server/itests/src/test/resources/ejb3-interceptors-aop.xml
@@ -0,0 +1,360 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE aop PUBLIC
+ "-//JBoss//DTD JBOSS AOP 1.0//EN"
+ "http://www.jboss.org/aop/dtd/jboss-aop_1_0.dtd">
+
+<aop>
+ <interceptor class="org.jboss.aspects.remoting.InvokeRemoteInterceptor"
scope="PER_VM"/>
+ <interceptor class="org.jboss.aspects.security.SecurityClientInterceptor"
scope="PER_VM"/>
+ <interceptor class="org.jboss.aspects.tx.ClientTxPropagationInterceptor"
scope="PER_VM"/>
+ <interceptor class="org.jboss.ejb3.remoting.IsLocalInterceptor"
scope="PER_VM"/>
+ <interceptor class="org.jboss.aspects.remoting.ClusterChooserInterceptor"
scope="PER_VM"/>
+
+ <interceptor class="org.jboss.aspects.tx.TxPropagationInterceptor"
scope="PER_VM"/>
+
+ <stack name="ServiceClientInterceptors">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
+ </stack>
+
+ <stack name="AsynchronousStatelessSessionClientInterceptors">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
+ </stack>
+
+ <stack name="AsynchronousStatefulSessionClientInterceptors">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
+ </stack>
+
+ <stack name="StatelessSessionClientInterceptors">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
+ </stack>
+
+ <stack name="StatefulSessionClientInterceptors">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
+ </stack>
+
+ <stack name="ClusteredStatelessSessionClientInterceptors">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.ClusterChooserInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
+ </stack>
+
+ <stack name="ClusteredStatefulSessionClientInterceptors">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.ClusterChooserInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
+ </stack>
+
+ <interceptor class="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"
scope="PER_CLASS"/>
+ <interceptor class="org.jboss.ejb3.ENCPropagationInterceptor"
scope="PER_VM"/>
+ <interceptor name="Basic Authorization"
factory="org.jboss.ejb3.security.RoleBasedAuthorizationInterceptorFactory"
scope="PER_CLASS"/>
+ <interceptor name="JACC Authorization"
factory="org.jboss.ejb3.security.JaccAuthorizationInterceptorFactory"
scope="PER_CLASS"/>
+ <interceptor
factory="org.jboss.ejb3.security.AuthenticationInterceptorFactory"
scope="PER_CLASS"/>
+ <interceptor
factory="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"
scope="PER_CLASS"/>
+ <interceptor
class="org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor"
scope="PER_VM"/>
+ <interceptor
class="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"
scope="PER_VM"/>
+ <interceptor class="org.jboss.ejb3.stateful.StatefulInstanceInterceptor"
scope="PER_VM"/>
+ <interceptor
class="org.jboss.ejb3.stateful.SessionSynchronizationInterceptor"
scope="PER_VM"/>
+ <interceptor class="org.jboss.ejb3.service.ServiceSingletonInterceptor"
scope="PER_VM"/>
+ <interceptor class="org.jboss.ejb3.cache.StatefulReplicationInterceptor"
scope="PER_VM"/>
+ <interceptor factory="org.jboss.ejb3.stateful.StatefulRemoveFactory"
scope="PER_CLASS_JOINPOINT"/>
+ <interceptor factory="org.jboss.ejb3.tx.TxInterceptorFactory"
scope="PER_CLASS_JOINPOINT"/>
+ <interceptor factory="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"
scope="PER_CLASS_JOINPOINT"/>
+ <interceptor
factory="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"
scope="PER_CLASS"/>
+ <interceptor class="org.jboss.ejb3.AllowedOperationsInterceptor"
scope="PER_VM"/>
+ <interceptor
factory="org.jboss.ejb3.mdb.CurrentMessageInjectorInterceptorFactory"
scope="PER_CLASS"/>
+ <interceptor
class="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"
scope="PER_VM"/>
+
+ <domain name="Stateless Bean">
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
+ <interceptor-ref name="Basic Authorization"/>
+ </bind>
+ <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
+ <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ </bind>
+ <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
+ @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.ThreadlocalPool.class,
maxSize=30, timeout=10000)
+ </annotation>
+ </domain>
+
+ <domain name="JACC Stateless Bean">
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
+ <interceptor-ref name="JACC Authorization"/>
+ </bind>
+ <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
+ <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ </bind>
+ <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
+ @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.ThreadlocalPool.class,
maxSize=30, timeout=10000)
+ </annotation>
+ </domain>
+
+ <domain name="Base Stateful Bean">
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
+ <interceptor-ref name="Basic Authorization"/>
+ </bind>
+ <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->@javax.ejb.Remove(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateful.StatefulRemoveFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateful.StatefulInstanceInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
+ <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
+ </bind>
+ <bind pointcut="execution(public *
$instanceof{javax.ejb.SessionSynchronization}->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateful.SessionSynchronizationInterceptor"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ </bind>
+
+ <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..)) AND !execution(public *
*->@javax.ejb.Remove(..))">
+ <interceptor-ref
name="org.jboss.ejb3.cache.StatefulReplicationInterceptor"/>
+ </bind>
+ <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
+ @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.ThreadlocalPool.class,
maxSize=30, timeout=10000)
+ </annotation>
+ </domain>
+
+ <domain name="Stateful Bean" extends="Base Stateful Bean"
inheritBindings="true">
+ <!-- NON Clustered cache configuration -->
+ <annotation expr="!class((a)org.jboss.annotation.ejb.cache.Cache) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.Cache
(org.jboss.ejb3.cache.simple.SimpleStatefulCache.class)
+ </annotation>
+ <annotation
expr="!class((a)org.jboss.annotation.ejb.cache.simple.PersistenceManager) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.simple.PersistenceManager
(org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager.class)
+ </annotation>
+ <annotation
expr="!class((a)org.jboss.annotation.ejb.cache.simple.CacheConfig) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.simple.CacheConfig (maxSize=100000,
idleTimeoutSeconds=300)
+ </annotation>
+
+ <!-- Clustered cache configuration -->
+ <annotation expr="!class((a)org.jboss.annotation.ejb.cache.Cache) AND
class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.Cache
(org.jboss.ejb3.cache.tree.StatefulTreeCache.class)
+ </annotation>
+ <annotation expr="!class((a)org.jboss.annotation.ejb.cache.tree.CacheConfig)
AND class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.tree.CacheConfig
(name="jboss.cache:service=EJB3SFSBClusteredCache", maxSize=100000,
idleTimeoutSeconds=300)
+ </annotation>
+ </domain>
+
+ <domain name="JACC Stateful Bean">
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
+ <interceptor-ref name="JACC Authorization"/>
+ </bind>
+ <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->@javax.ejb.Remove(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateful.StatefulRemoveFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateful.StatefulInstanceInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
+ <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
+ </bind>
+ <bind pointcut="execution(public *
$instanceof{javax.ejb.SessionSynchronization}->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateful.SessionSynchronizationInterceptor"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ </bind>
+
+ <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..)) AND !execution(public *
*->@javax.ejb.Remove(..))">
+ <interceptor-ref
name="org.jboss.ejb3.cache.StatefulReplicationInterceptor"/>
+ </bind>
+ <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
+ @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.ThreadlocalPool.class,
maxSize=30, timeout=10000)
+ </annotation>
+
+ <!-- NON Clustered cache configuration -->
+ <annotation expr="!class((a)org.jboss.annotation.ejb.cache.Cache) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.Cache
(org.jboss.ejb3.cache.simple.SimpleStatefulCache.class)
+ </annotation>
+ <annotation
expr="!class((a)org.jboss.annotation.ejb.cache.simple.PersistenceManager) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.simple.PersistenceManager
(org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager.class)
+ </annotation>
+ <annotation
expr="!class((a)org.jboss.annotation.ejb.cache.simple.CacheConfig) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.simple.CacheConfig (maxSize=100000,
idleTimeoutSeconds=300)
+ </annotation>
+
+ <!-- Clustered cache configuration -->
+ <annotation expr="!class((a)org.jboss.annotation.ejb.cache.Cache) AND
class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.Cache
(org.jboss.ejb3.cache.tree.StatefulTreeCache.class)
+ </annotation>
+ <annotation expr="!class((a)org.jboss.annotation.ejb.cache.tree.CacheConfig)
AND class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.tree.CacheConfig
(name="jboss.cache:service=EJB3SFSBClusteredCache", maxSize=100000,
idleTimeoutSeconds=300)
+ </annotation>
+ </domain>
+
+ <domain name="Embedded Stateful Bean" extends="Base Stateful
Bean" inheritBindings="true">
+ <!-- NON Clustered cache configuration -->
+ <annotation expr="!class((a)org.jboss.annotation.ejb.cache.Cache)">
+ @org.jboss.annotation.ejb.cache.Cache
(org.jboss.ejb3.cache.NoPassivationCache.class)
+ </annotation>
+
+ </domain>
+
+ <domain name="Message Driven Bean">
+ <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
+ <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ </bind>
+ <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
+ @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.StrictMaxPool.class,
maxSize=30, timeout=10000)
+ </annotation>
+ </domain>
+
+ <domain name="Consumer Bean">
+ <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
+ <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..)) AND (has(*
*->@org.jboss.annotation.ejb.CurrentMessage(..)) OR hasfield(*
*->(a)org.jboss.annotation.ejb.CurrentMessage))">
+ <interceptor-ref
name="org.jboss.ejb3.mdb.CurrentMessageInjectorInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ </bind>
+ <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
+ @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.StrictMaxPool.class,
maxSize=30, timeout=10000)
+ </annotation>
+ </domain>
+
+ <domain name="Service Bean">
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
+ </bind>
+ <bind pointcut="!execution(* *->create()) AND !execution(*
*->start()) AND !execution(*->new(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
+ <interceptor-ref name="Basic Authorization"/>
+ </bind>
+ <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
+ <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..)) AND !execution(*
*->create()) AND !execution(* *->start())">
+ <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ </bind>
+ </domain>
+
+ <domain name="JACC Service Bean">
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
+ </bind>
+ <bind pointcut="!execution(* *->create()) AND !execution(*
*->start()) AND !execution(*->new(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
+ <interceptor-ref name="Basic Authorization"/>
+ </bind>
+ <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
+ <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..)) AND !execution(*
*->create()) AND !execution(* *->start())">
+ <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ </bind>
+ </domain>
+
+
+</aop>
\ No newline at end of file
diff --git a/modules/enterprise/server/itests/src/test/resources/embedded-jboss-beans.xml
b/modules/enterprise/server/itests/src/test/resources/embedded-jboss-beans.xml
new file mode 100644
index 0000000..05edefa
--- /dev/null
+++ b/modules/enterprise/server/itests/src/test/resources/embedded-jboss-beans.xml
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer:2.0
bean-deployer_2_0.xsd"
+ xmlns="urn:jboss:bean-deployer:2.0">
+
+ <bean name="Naming"
class="org.jnp.server.SingletonNamingServer"/>
+
+ <bean name="InitialContextProperties"
class="java.util.Hashtable">
+ <constructor>
+ <parameter class="java.util.Map">
+ <map keyClass="java.lang.String"
valueClass="java.lang.String">
+ <entry>
+ <key>java.naming.factory.initial</key>
+ <value>org.jnp.interfaces.LocalOnlyContextFactory</value>
+ </entry>
+ <entry>
+ <key>java.naming.factory.url.pkgs</key>
+ <value>org.jboss.naming:org.jnp.interfaces</value>
+ </entry>
+ </map>
+ </parameter>
+ </constructor>
+ </bean>
+
+ <bean name="java:comp/Initializer"
class="org.jboss.ejb3.embedded.JavaCompInitializer">
+ <property name="jndiProperties">
+ <inject bean="InitialContextProperties"/>
+ </property>
+ </bean>
+
+ <bean name="XidFactory"
class="org.jboss.tm.XidFactoryImpl"/>
+
+ <bean name="XidFactoryMBean"
class="org.jboss.ejb3.embedded.XidFactoryMBean">
+ <constructor>
+ <parameter class="org.jboss.tm.XidFactoryBase">
+ <inject bean="XidFactory"/>
+ </parameter>
+ </constructor>
+ </bean>
+
+ <bean name="TransactionManagerInitializer"
class="org.jboss.tm.TransactionManagerInitializer">
+ <property name="xidFactory">
+ <inject bean="XidFactory"/>
+ </property>
+ <property name="initialContextProperties">
+ <inject bean="InitialContextProperties"/>
+ </property>
+ </bean>
+
+ <bean name="UserTransaction"
class="org.jboss.ejb3.embedded.UserTransactionImpl">
+ <demand>TransactionManagerInitializer</demand>
+ </bean>
+
+ <bean name="UserTransactionBinding"
class="org.jboss.ejb3.embedded.JndiBinder">
+ <property name="jndiProperties">
+ <inject bean="InitialContextProperties"/>
+ </property>
+ <property name="target">
+ <inject bean="UserTransaction"/>
+ </property>
+ <property name="bindTo">UserTransaction</property>
+ <property name="serializable">false</property>
+ </bean>
+
+
+ <bean name="TransactionManager" class="java.lang.Object">
+ <constructor factoryMethod="getTransactionManager">
+ <factory bean="TransactionManagerInitializer"/>
+ </constructor>
+ </bean>
+ <bean name="CachedConnectionManager"
class="org.jboss.resource.connectionmanager.CachedConnectionManagerReference">
+ <property name="transactionManager">
+ <inject bean="TransactionManager"/>
+ </property>
+ </bean>
+
+ <bean name="RHQDSBootstrap"
class="org.jboss.resource.adapter.jdbc.local.LocalTxDataSource">
+ <property
name="driverClass">${rhq.test.ds.driver-class}</property>
+ <property
name="connectionURL">${rhq.test.ds.connection-url}</property>
+ <property
name="userName">${rhq.test.ds.user-name}</property>
+ <property name="password">${rhq.test.ds.password}</property>
+ <property name="jndiName">java:/RHQDS</property>
+ <property name="minSize">0</property>
+ <property name="maxSize">20</property>
+ <property name="blockingTimeout">3000</property>
+ <property name="idleTimeout">100000</property>
+ <property name="transactionManager">
+ <inject bean="TransactionManager"/>
+ </property>
+ <property name="cachedConnectionManager">
+ <inject bean="CachedConnectionManager"/>
+ </property>
+ <property name="initialContextProperties">
+ <inject bean="InitialContextProperties"/>
+ </property>
+ </bean>
+
+ <bean name="RHQDS" class="java.lang.Object">
+ <constructor factoryMethod="getDatasource">
+ <factory bean="RHQDSBootstrap"/>
+ </constructor>
+ </bean>
+
+ <!-- needed for Quartz' no-TX data source (even though this is a local-tx,
seems like Quartz is still working) -->
+ <bean name="NoTxRHQDSBootstrap"
class="org.jboss.resource.adapter.jdbc.local.LocalTxDataSource">
+ <property
name="driverClass">${rhq.test.ds.driver-class}</property>
+ <property
name="connectionURL">${rhq.test.ds.connection-url}</property>
+ <property
name="userName">${rhq.test.ds.user-name}</property>
+ <property name="password">${rhq.test.ds.password}</property>
+ <property name="jndiName">java:/NoTxRHQDS</property>
+ <property name="minSize">0</property>
+ <property name="maxSize">10</property>
+ <property name="blockingTimeout">1000</property>
+ <property name="idleTimeout">100000</property>
+ <property name="transactionManager">
+ <inject bean="TransactionManager"/>
+ </property>
+ <property name="cachedConnectionManager">
+ <inject bean="CachedConnectionManager"/>
+ </property>
+ <property name="initialContextProperties">
+ <inject bean="InitialContextProperties"/>
+ </property>
+ </bean>
+
+ <bean name="NoTxRHQDS" class="java.lang.Object">
+ <constructor factoryMethod="getDatasource">
+ <factory bean="NoTxRHQDSBootstrap"/>
+ </constructor>
+ </bean>
+
+ <bean name="DefaultDSBootstrap"
class="org.jboss.resource.adapter.jdbc.local.LocalTxDataSource">
+ <property
name="driverClass">org.hsqldb.jdbcDriver</property>
+ <property name="connectionURL">jdbc:hsqldb:.</property>
+ <!-- <property
name="connectionURL">jdbc:hsqldb:./hypersonic/localDB</property>
-->
+ <property name="userName">sa</property>
+ <property name="jndiName">java:/DefaultDS</property>
+ <property name="minSize">0</property>
+ <property name="maxSize">10</property>
+ <property name="blockingTimeout">1000</property>
+ <property name="idleTimeout">100000</property>
+ <property name="transactionManager">
+ <inject bean="TransactionManager"/>
+ </property>
+ <property name="cachedConnectionManager">
+ <inject bean="CachedConnectionManager"/>
+ </property>
+ <property name="initialContextProperties">
+ <inject bean="InitialContextProperties"/>
+ </property>
+ </bean>
+
+ <bean name="DefaultDS" class="java.lang.Object">
+ <constructor factoryMethod="getDatasource">
+ <factory bean="DefaultDSBootstrap"/>
+ </constructor>
+ </bean>
+
+</deployment>
\ No newline at end of file
diff --git a/modules/enterprise/server/itests/src/test/resources/jboss-jms-beans.xml
b/modules/enterprise/server/itests/src/test/resources/jboss-jms-beans.xml
new file mode 100644
index 0000000..287cffc
--- /dev/null
+++ b/modules/enterprise/server/itests/src/test/resources/jboss-jms-beans.xml
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer:2.0
bean-deployer_2_0.xsd"
+ xmlns="urn:jboss:bean-deployer:2.0">
+ <bean name="jboss.mq:service=JMSProviderLoader,name=JMSProvider"
class="org.jboss.jms.jndi.JNDIProviderAdapter">
+ <property name="factoryRef">java:/JmsXA</property>
+ <property name="queueFactoryRef">java:/JmsXA</property>
+ <property name="topicFactoryRef">java:/JmsXA</property>
+ <property name="properties"
class="java.util.Properties">
+ <map keyClass="java.lang.String"
valueClass="java.lang.String">
+ <entry>
+ <key>java.naming.factory.initial</key>
+
<value>org.jnp.interfaces.LocalOnlyContextFactory</value>
+ </entry>
+ <entry>
+ <key>java.naming.factory.url.pkgs</key>
+ <value>org.jboss.naming:org.jnp.interfaces</value>
+ </entry>
+ </map>
+ </property>
+ </bean>
+
+ <bean name="b1" class="org.jboss.ejb3.embedded.JndiBinder">
+ <property name="jndiProperties"><inject
bean="InitialContextProperties"/></property>
+ <property name="target"><inject
bean="jboss.mq:service=JMSProviderLoader,name=JMSProvider"/></property>
+ <property name="bindTo">java:/DefaultJMSProvider</property>
+ <property name="serializable">true</property>
+ </bean>
+
+ <bean name="jboss.mq:service=ServerSessionPoolMBean,name=StdJMSPool"
class="org.jboss.jms.asf.StdServerSessionPoolFactory">
+ <property name="name">StdJMSPool</property>
+ <property name="xidFactory"><inject
bean="XidFactoryMBean"/></property>
+ <property name="transactionManager"><inject
bean="TransactionManager"/></property>
+ </bean>
+
+ <bean name="b2" class="org.jboss.ejb3.embedded.JndiBinder">
+ <property name="jndiProperties"><inject
bean="InitialContextProperties"/></property>
+ <property name="target"><inject
bean="jboss.mq:service=ServerSessionPoolMBean,name=StdJMSPool"/></property>
+ <property name="bindTo">java:/StdJMSPool</property>
+ <property name="serializable">false</property>
+ </bean>
+
+
+ <bean name="jboss.mq:service=PersistenceManager"
class="org.jboss.mq.pm.none.PersistenceManager">
+ </bean>
+
+ <bean name="jboss.mq:service=MessageCache"
class="org.jboss.mq.kernel.MessageCache">
+ <property name="persistenceManager"><inject
bean="jboss.mq:service=PersistenceManager"/></property>
+ <property name="highMemoryMark">50</property>
+ <property name="maxMemoryMark">60</property>
+ </bean>
+
+ <bean name="jms-rar-WorkManager"
class="org.jboss.ejb3.embedded.resource.JBossWorkManager">
+ </bean>
+
+ <bean name="jms-rar-DeploymentInfo"
class="org.jboss.ejb3.embedded.resource.Ejb3DeploymentInfo">
+ <constructor>
+ <parameter
class="java.lang.String">jms-ra.rar</parameter>
+ <parameter
class="java.lang.String">javax.jms.MessageListener</parameter>
+ <parameter
class="java.lang.String">org.jboss.resource.adapter.jms.inflow.JmsActivationSpec</parameter>
+ </constructor>
+ </bean>
+
+ <bean name="jboss.jca:name='jms-ra.rar',service=RARDeployment"
class="org.jboss.ejb3.embedded.resource.RARDeployment">
+ <constructor>
+ <parameter class="org.jboss.deployment.DeploymentInfo">
+ <inject bean="jms-rar-DeploymentInfo"/>
+ </parameter>
+ </constructor>
+ <property name="workManager"><inject
bean="jms-rar-WorkManager"/></property>
+ </bean>
+
+ <bean name="jboss.mq:service=StateManager"
class="org.jboss.mq.sm.none.NullStateManager">
+ </bean>
+
+ <bean name="BasicQueueParameters"
class="org.jboss.mq.server.BasicQueueParameters"/>
+
+ <bean name="jboss.mq:service=ThreadPool"
class="org.jboss.util.threadpool.BasicThreadPool">
+ <property name="name">JMSThread</property>
+ <property name="threadGroupName">JBossMQ Server
Threads</property>
+ <!-- The max number of threads in the pool -->
+ <property name="maximumPoolSize">10</property>
+ <!-- The max number of tasks before the queue is full -->
+ <property name="maximumQueueSize">1000</property>
+ <!-- The behavior of the pool when a task is added and the queue is full.
+ abort - a RuntimeException is thrown
+ run - the calling thread executes the task
+ wait - the calling thread blocks until the queue has room
+ discard - the task is silently discarded without being run
+ discardOldest - check to see if a task is about to complete and enque
+ the new task if possible, else run the task in the calling thread
+ -->
+ <property name="blockingMode">run</property>
+ </bean>
+
+ <bean name="jboss.mq:service=DestinationManager"
class="org.jboss.mq.server.JMSDestinationManager">
+ <constructor>
+ <parameter class="org.jboss.mq.server.BasicQueueParameters">
+ <inject bean="BasicQueueParameters"/>
+ </parameter>
+ </constructor>
+ <property name="persistenceManager"><inject
bean="jboss.mq:service=PersistenceManager"/></property>
+ <property name="messageCache"><inject
bean="jboss.mq:service=MessageCache"/></property>
+ <property name="stateManager"><inject
bean="jboss.mq:service=StateManager"/></property>
+ <property name="threadPool"><inject
bean="jboss.mq:service=ThreadPool"/></property>
+ <property name="threadGroup"><inject
bean="jboss.mq:service=ThreadPool"
property="threadGroup"/></property>
+ <start method="startServer"/>
+ <stop method="stopServer"/>
+ </bean>
+
+ <bean name="jboss.mq.destination:service=Queue,name=DLQ"
class="org.jboss.mq.kernel.Queue">
+ <property name="destinationManagerPojo"><inject
bean="jboss.mq:service=DestinationManager"/></property>
+ <property name="initialContextProperties"><inject
bean="InitialContextProperties"/></property>
+ <property name="destinationName">DLQ</property>
+ </bean>
+
+ <bean name="jboss.mq:service=Invoker"
class="org.jboss.mq.server.JMSServerInvoker">
+ <property name="next"><inject
bean="jboss.mq:service=DestinationManager"/></property>
+ </bean>
+
+ <bean name="jboss.mq:service=invocationlayer,type=JVM"
class="org.jboss.mq.kernel.JVMIL">
+ <property name="jmsInvoker"><inject
bean="jboss.mq:service=Invoker"/></property>
+ <!-- notice we actually switched - the non-xa connection factory JNDI Ref is the
JNDI name our EJBs use -->
+ <!-- the embedded EJB container doesn't support XA, so the connection factory
our JmsXA JNDI lookup will return will be a non-XA factory -->
+ <property
name="connectionFactoryJNDIRef">java:/JmsXA</property>
+ <property
name="XAConnectionFactoryJNDIRef">java:/ConnectionFactory</property>
+ <property name="pingPeriod">0</property>
+ <property name="initialContextProperties"><inject
bean="InitialContextProperties"/></property>
+ </bean>
+
+</deployment>
diff --git a/modules/enterprise/server/itests/src/test/resources/jms-ra.rar
b/modules/enterprise/server/itests/src/test/resources/jms-ra.rar
new file mode 100644
index 0000000..c4807c6
Binary files /dev/null and
b/modules/enterprise/server/itests/src/test/resources/jms-ra.rar differ
diff --git a/modules/enterprise/server/itests/src/test/resources/jndi.properties
b/modules/enterprise/server/itests/src/test/resources/jndi.properties
new file mode 100644
index 0000000..9225cef
--- /dev/null
+++ b/modules/enterprise/server/itests/src/test/resources/jndi.properties
@@ -0,0 +1,2 @@
+java.naming.factory.initial=org.jnp.interfaces.LocalOnlyContextFactory
+java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
\ No newline at end of file
diff --git a/modules/enterprise/server/itests/src/test/resources/log4j.xml
b/modules/enterprise/server/itests/src/test/resources/log4j.xml
new file mode 100644
index 0000000..bc65329
--- /dev/null
+++ b/modules/enterprise/server/itests/src/test/resources/log4j.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- ===================================================================== -->
+<!-- -->
+<!-- Log4j Configuration -->
+<!-- -->
+<!-- ===================================================================== -->
+
+<!-- $Id: log4j.xml 39945 2006-01-12 02:44:07Z bill $ -->
+
+<!--
+ | For more configuration infromation and examples see the Jakarta Log4j
+ | owebsite:
http://jakarta.apache.org/log4j
+ -->
+
+<log4j:configuration
xmlns:log4j="http://jakarta.apache.org/log4j/"
debug="true">
+
+ <appender name="CONSOLE"
class="org.apache.log4j.ConsoleAppender">
+ <errorHandler
class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
+ <param name="Target" value="System.out"/>
+ <param name="Threshold" value="WARN"/>
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Messagen -->
+ <!--
+ <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p
[%c{1}] %m%n"/>
+ -->
+ <param name="ConversionPattern" value="%-5p %d{dd-MM
HH:mm:ss,SSS} [%c] (%F:%M:%L) -%m%n"/>
+ </layout>
+ </appender>
+
+ <appender name="FILE"
class="org.apache.log4j.RollingFileAppender">
+ <param name="File" value="target/server-jar-test.log"/>
+ <param name="Threshold" value="WARN"/>
+ <param name="Append" value="false"/>
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Messagen -->
+ <!--
+ <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p
[%c{1}] %m%n"/>
+ -->
+ <param name="ConversionPattern" value="%-5p %d{dd-MM
HH:mm:ss,SSS} [%c] (%F:%M:%L) -%m%n"/>
+ </layout>
+ </appender>
+
+ <!-- Hibernate logs WARNINGS frequent from this class, in test envs. -->
+ <category name="org.hibernate.hql.ast.QueryTranslatorImpl">
+ <priority value="ERROR"/>
+ </category>
+
+ <!-- hides the TIMER SERVICE IS NOT INSTALLED warning - we know embedded EJB3
container doesn't support timers -->
+ <category
name="org.jboss.ejb3.timerservice.jboss.JBossTimerServiceFactory">
+ <priority value="ERROR"/>
+ </category>
+
+ <!-- hides the shutdown warnings - for some reason, the container spits out some
warnings when shutting down -->
+ <category
name="org.jboss.kernel.plugins.dependency.StartStopLifecycleAction">
+ <priority value="ERROR"/>
+ </category>
+
+ <!-- Hibernate SQL logs -->
+ <!--
+ <category name="org.hibernate.SQL">
+ <priority value="DEBUG"/>
+ </category>
+ -->
+
+ <root>
+ <appender-ref ref="CONSOLE"/>
+ <appender-ref ref="FILE"/>
+ </root>
+
+</log4j:configuration>
diff --git a/modules/enterprise/server/itests/src/test/resources/login-config.xml
b/modules/enterprise/server/itests/src/test/resources/login-config.xml
new file mode 100644
index 0000000..645294d
--- /dev/null
+++ b/modules/enterprise/server/itests/src/test/resources/login-config.xml
@@ -0,0 +1,72 @@
+<?xml version='1.0'?>
+
+<!DOCTYPE policy PUBLIC
+ "-//JBoss//DTD JBOSS Security Config 3.0//EN"
+ "http://www.jboss.org/j2ee/dtd/security_config.dtd">
+
+<!-- The XML based JAAS login configuration read by the
+org.jboss.security.auth.login.XMLLoginConfig mbean. Add
+an application-policy element for each security domain.
+
+The outline of the application-policy is:
+<application-policy name="security-domain-name">
+ <authentication>
+ <login-module code="login.module1.class.name"
flag="control_flag">
+ <module-option name =
"option1-name">option1-value</module-option>
+ <module-option name =
"option2-name">option2-value</module-option>
+ ...
+ </login-module>
+
+ <login-module code="login.module2.class.name"
flag="control_flag">
+ ...
+ </login-module>
+ ...
+ </authentication>
+</application-policy>
+
+$Revision: 42748 $
+-->
+
+<policy>
+ <!-- Used by clients within the application server VM such as
+ mbeans and servlets that access EJBs.
+ -->
+ <application-policy name="client-login">
+ <authentication>
+ <login-module code="org.jboss.security.ClientLoginModule"
+ flag="required">
+ <!-- Any existing security context will be restored on logout -->
+ <module-option
name="restore-login-identity">true</module-option>
+ </login-module>
+ </authentication>
+ </application-policy>
+
+ <application-policy name = "jbossmq">
+ <authentication>
+ <login-module code = "org.jboss.mq.sm.file.DynamicLoginModule"
flag = "required">
+ <module-option name =
"unauthenticatedIdentity">guest</module-option>
+ <module-option name =
"sm.objectname">jboss.mq:service=StateManager</module-option>
+ </login-module>
+ </authentication>
+ </application-policy>
+
+ <application-policy name="other">
+ <!-- A simple server login module, which can be used when the number
+ of users is relatively small. It uses two properties files:
+ users.properties, which holds users (key) and their password (value).
+ roles.properties, which holds users (key) and a comma-separated list of
+ their roles (value).
+ The unauthenticatedIdentity property defines the name of the principal
+ that will be used when a null username and password are presented as is
+ the case for an unuathenticated web client or MDB. If you want to
+ allow such users to be authenticated add the property, e.g.,
+ unauthenticatedIdentity="nobody"
+ -->
+ <authentication>
+ <login-module
code="org.jboss.security.auth.spi.UsersRolesLoginModule"
+ flag="required"/>
+ </authentication>
+ </application-policy>
+
+</policy>
+
diff --git a/modules/enterprise/server/itests/src/test/resources/rhq-mdb-beans.xml
b/modules/enterprise/server/itests/src/test/resources/rhq-mdb-beans.xml
new file mode 100644
index 0000000..ad05b5e
--- /dev/null
+++ b/modules/enterprise/server/itests/src/test/resources/rhq-mdb-beans.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer:2.0
bean-deployer_2_0.xsd"
+ xmlns="urn:jboss:bean-deployer:2.0">
+
+ <bean name="jboss.mq.destination:service=Queue,name=AlertConditionQueue"
class="org.jboss.mq.kernel.Queue">
+ <property name="destinationManagerPojo"><inject
bean="jboss.mq:service=DestinationManager"/></property>
+ <property name="initialContextProperties"><inject
bean="InitialContextProperties"/></property>
+ <property
name="destinationName">AlertConditionQueue</property>
+ </bean>
+
+ <bean name="jboss.mq.destination:service=Queue,name=DriftChangesetQueue"
class="org.jboss.mq.kernel.Queue">
+ <property name="destinationManagerPojo"><inject
bean="jboss.mq:service=DestinationManager"/></property>
+ <property name="initialContextProperties"><inject
bean="InitialContextProperties"/></property>
+ <property
name="destinationName">DriftChangesetQueue</property>
+ </bean>
+
+ <bean name="jboss.mq.destination:service=Queue,name=DriftFileQueue"
class="org.jboss.mq.kernel.Queue">
+ <property name="destinationManagerPojo"><inject
bean="jboss.mq:service=DestinationManager"/></property>
+ <property name="initialContextProperties"><inject
bean="InitialContextProperties"/></property>
+ <property name="destinationName">DriftFileQueue</property>
+ </bean>
+
+</deployment>
\ No newline at end of file
diff --git a/modules/enterprise/server/itests/src/test/resources/security-beans.xml
b/modules/enterprise/server/itests/src/test/resources/security-beans.xml
new file mode 100644
index 0000000..84fa819
--- /dev/null
+++ b/modules/enterprise/server/itests/src/test/resources/security-beans.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+ xmlns="urn:jboss:bean-deployer">
+
+ <bean class="org.jboss.ejb3.embedded.JaasSecurityManagerService"
+ name="jboss.security:service=JaasSecurityManager">
+ <property name="initialContextProperties">
+ <inject bean="InitialContextProperties"/>
+ </property>
+ </bean>
+</deployment>
diff --git
a/modules/enterprise/server/itests/src/test/resources/test-assist-color-number.txt
b/modules/enterprise/server/itests/src/test/resources/test-assist-color-number.txt
new file mode 100644
index 0000000..6ad90cc
--- /dev/null
+++ b/modules/enterprise/server/itests/src/test/resources/test-assist-color-number.txt
@@ -0,0 +1,46 @@
+
+color[ number
+c
+color[
+n
+number
+r
+color[ number
+lo
+color[
+number
+number!= number!== number= number==
+be
+number
+number==
+number=="two" number=="four" number=="twenty-two"
number=="twenty-four" number=="forty-two"
+number==t
+number=="two" number=="twenty-two" number=="twenty-four"
number=="forty-two"
+number==fo
+number=="four" number=="twenty-four" number=="forty-two"
+color
+color[
+color[
+color[primary] color[other]
+color[p
+color[primary]
+color[o
+color[other]
+color[r
+color[primary] color[other]
+color[primary
+color[primary]
+color[primary]
+color[primary]!= color[primary]!== color[primary]= color[primary]==
+color[primary]=
+color[primary]="red" color[primary]="green"
color[primary]="blue"
+color[primary]=e
+color[primary]="red" color[primary]="green"
color[primary]="blue"
+color[primary]=d
+color[primary]="red"
+color[primary]=g
+color[primary]="green"
+color[primary]=b
+color[primary]="blue"
+color[primary]=r
+color[primary]="red" color[primary]="green"
\ No newline at end of file
diff --git a/modules/enterprise/server/itests/src/test/resources/test-ldap.properties
b/modules/enterprise/server/itests/src/test/resources/test-ldap.properties
new file mode 100644
index 0000000..3316083
--- /dev/null
+++ b/modules/enterprise/server/itests/src/test/resources/test-ldap.properties
@@ -0,0 +1,2 @@
+rhq.test.ldap.url=${rhq.test.ldap.url}
+rhq.test.ldap.LDAPFactory=${rhq.test.ldap.LDAPFactory}
\ No newline at end of file
diff --git a/modules/enterprise/server/itests/src/test/resources/test-scheduler.properties
b/modules/enterprise/server/itests/src/test/resources/test-scheduler.properties
new file mode 100644
index 0000000..804639a
--- /dev/null
+++ b/modules/enterprise/server/itests/src/test/resources/test-scheduler.properties
@@ -0,0 +1,29 @@
+# QUARTZ CONFIGURATION FOR OUR UNIT TESTS
+# our test timeout will be fast, 5 seconds
+rhq.server.operation-timeout = 5
+
+# scheduler factory config
+org.quartz.scheduler.instanceName = RHQScheduler
+org.quartz.scheduler.instanceId = AUTO
+
+# thread pool config
+org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
+org.quartz.threadPool.threadCount = 25
+org.quartz.threadPool.threadPriority = 5
+
+# database config - note the use of POSTGRES for tests
+org.quartz.jobStore.class =
org.quartz.impl.jdbcjobstore.JobStoreCMT
+org.quartz.jobStore.driverDelegateClass =
org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
+# tests don't need this
+org.quartz.jobStore.isClustered = false
+org.quartz.jobStore.clusterCheckinInterval = 600000
+# make this a small non-zero time (in ms) so the scheduler (almost) never sleeps for more
predictable test timing
+org.quartz.scheduler.idleWaitTime = 10
+org.quartz.jobStore.tablePrefix = RHQ_QRTZ_
+org.quartz.jobStore.useProperties = true
+org.quartz.jobStore.dataSource = RHQDS
+org.quartz.dataSource.RHQDS.jndiURL = java:/RHQDS
+org.quartz.dataSource.RHQDS.maxConnections = 10
+org.quartz.jobStore.nonManagedTXDataSource = NoTxRHQDS
+org.quartz.dataSource.NoTxRHQDS.jndiURL = java:/NoTxRHQDS
+org.quartz.dataSource.NoTxRHQDS.maxConnections = 10
\ No newline at end of file
diff --git a/modules/enterprise/server/itests/src/test/resources/testng.xml
b/modules/enterprise/server/itests/src/test/resources/testng.xml
new file mode 100644
index 0000000..1452edb
--- /dev/null
+++ b/modules/enterprise/server/itests/src/test/resources/testng.xml
@@ -0,0 +1,12 @@
+<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
+
+<suite name="EJB3 Testsuite" >
+ <test name="EJB3 tests" >
+ <groups>
+ <run>
+ <include name="integration.ejb3"/>
+ </run>
+ </groups>
+
+ </test>
+</suite>
diff --git a/modules/enterprise/server/pom.xml b/modules/enterprise/server/pom.xml
index 08b43b1..a83ff2b 100644
--- a/modules/enterprise/server/pom.xml
+++ b/modules/enterprise/server/pom.xml
@@ -40,7 +40,7 @@
<module>ear</module>
<module>safe-invoker</module>
<module>client-api</module>
- <module>integration-tests</module>
+ <module>itests</module>
</modules>
</profile>
@@ -58,23 +58,6 @@
</modules>
</profile>
- <profile>
- <id>integration-tests</id>
- <activation>
- <property>
- <name>rhq.itests</name>
- </property>
- </activation>
- <modules>
- <module>xml-schemas</module>
- <module>jar</module>
- <module>sars</module>
- <module>plugins</module>
- <module>client-api</module>
- <module>integration-tests</module>
- </modules>
- </profile>
-
</profiles>
</project>
commit 424fa3cf665209465d0dd124a292845eaa05fa4a
Author: John Sanda <jsanda(a)redhat.com>
Date: Tue Nov 1 11:23:30 2011 -0400
Initial commit for integration-tests module
The server/integration-tests module was born out of the need to resolve
a dependency issue for drift tests. There were drift tests in server/jar
that depended on having a drift server plugin installed, but the server
plugins are not built until after server/jar is built.
This commit moves tests over to the integrations-tests module which is
built after server/jar and the plugins, thus resolving the dependency
issue.
server/jar now produces a test jar artifact so that integration-tests
has access to AbstractEJB3Test. A better, longer term solution would be
to extract AbstractEJB3Test out into a common module since it is
duplicated in core/domain as well. I don't have time for that right now
though.
diff --git a/modules/enterprise/server/integration-tests/pom.xml
b/modules/enterprise/server/integration-tests/pom.xml
new file mode 100644
index 0000000..7c29615
--- /dev/null
+++ b/modules/enterprise/server/integration-tests/pom.xml
@@ -0,0 +1,556 @@
+<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-parent</artifactId>
+ <version>4.1.0-SNAPSHOT</version>
+ <relativePath>../../../../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>rhq-server-integration-tests</artifactId>
+
+ <name>RHQ Server Integration Tests</name>
+ <description>RHQ enterprise server integration tests</description>
+
+ <scm>
+
<
connection>scm:git:ssh://git.fedorahosted.org/git/rhq.git/modules/ente...
+
<
developerConnection>scm:git:ssh://git.fedorahosted.org/git/rhq.git/mod...
+ </scm>
+
+ <properties>
+ <rhq.server.datasource>java:/RHQDS</rhq.server.datasource>
+ <rhq.server.ds-mapping>PostgreSQL</rhq.server.ds-mapping>
+
<jboss-embeddable-ejb3.version>1.0.0.Alpha9</jboss-embeddable-ejb3.version>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-enterprise-comm</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-enterprise-server-xml-schemas</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-core-domain</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-core-client-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-common-drift</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>com.googlecode.java-diff-utils</groupId>
+ <artifactId>diffutils</artifactId>
+ <version>1.2.1</version>
+ </dependency>
+
+ <!--================ 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. -->
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>test-utils</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-core-domain</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-enterprise-server</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-enterprise-server</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>rhq-core-client-api</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq.helpers</groupId>
+ <artifactId>perftest-support</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>ant</groupId>
+ <artifactId>ant</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>ant</groupId>
+ <artifactId>ant-launcher</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>jboss.jboss-embeddable-ejb3</groupId>
+ <artifactId>jboss-ejb3-all</artifactId>
+ <version>${jboss-embeddable-ejb3.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- NOTE: The remaining test deps correspond to the classes contained in
hibernate-all.jar and thirdparty-all.jar. -->
+
+ <dependency>
+ <groupId>antlr</groupId>
+ <artifactId>antlr</artifactId>
+ <version>2.7.7</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>javassist</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>trove</groupId>
+ <artifactId>trove</artifactId>
+ <version>1.0.2</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>xerces</groupId>
+ <artifactId>xercesImpl</artifactId>
+ <version>2.8.1</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>net.sf.opencsv</groupId>
+ <artifactId>opencsv</artifactId>
+ <version>1.8</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-jxpath</groupId>
+ <artifactId>commons-jxpath</artifactId>
+ <version>1.3</version>
+ <scope>test</scope>
+ </dependency>
+
+
+ <!-- 3rd Party Deps -->
+
+ <dependency>
+ <groupId>org.antlr</groupId>
+ <artifactId>antlr</artifactId>
+ <version>3.2</version>
+ </dependency>
+
+ <!-- Required by a couple APL and Lather classes - TODO: Remove this once APL
and Lather have been excised. -->
+ <dependency>
+ <groupId>commons-beanutils</groupId>
+ <artifactId>commons-beanutils</artifactId>
+ <version>1.6.1</version>
+ </dependency>
+
+ <!-- Required by a couple APL classes - TODO: Remove this once APL has been
removed. -->
+ <!-- also required by EJB3 Embedded (test scope) -->
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>3.2</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-httpclient</groupId>
+ <artifactId>commons-httpclient</artifactId>
+ <version>3.0.1</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.4</version>
+ </dependency>
+
+ <!-- Required by a couple APL classes - TODO: Remove this once APL has been
removed. -->
+ <dependency>
+ <groupId>commons-validator</groupId>
+ <artifactId>commons-validator</artifactId>
+ <version>1.1.4</version>
+ </dependency>
+
+ <!-- required by RHQ server classes, as well as EJB3 Embedded -->
+ <dependency>
+ <groupId>dom4j</groupId>
+ <artifactId>dom4j</artifactId>
+ <version>1.6.1-jboss</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>gnu-getopt</groupId>
+ <artifactId>getopt</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ </dependency>
+
+ <dependency>
+ <groupId>hibernate</groupId>
+ <artifactId>hibernate3</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>hibernate-annotations</groupId>
+ <artifactId>hibernate-annotations</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>hibernate-entitymanager</groupId>
+ <artifactId>hibernate-entitymanager</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>i18nlog</groupId>
+ <artifactId>i18nlog</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-javamail_1.3.1_spec</artifactId>
+ <!-- The Sun javamail jar isn't available from a public repo due to
licensing issues,
+ so use the Geronimo one instead. -->
+ <version>1.3</version>
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>javax.persistence</groupId>
+ <artifactId>persistence-api</artifactId>
+ <version>1.0</version>
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.4</version>
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>jsp-api</artifactId>
+ <version>2.0</version>
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-annotations-ejb3</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-cache</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-common</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-ejb3x</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <!-- includes the org.jboss.ejb3.StrictMaxPool class, which is needed by the
PoolClass annotation used on some
+ of our SLSB's -->
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-ejb3</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-j2ee</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-jmx</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-system</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jbosssx</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jbpm</artifactId>
+ <version>3.1.1</version>
+ </dependency>
+
+ <!-- for the transaction interrupt EJB3 interceptor -->
+ <dependency>
+ <groupId>org.jboss.transaction</groupId>
+ <artifactId>jboss-jta</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>org.opensymphony.quartz</groupId>
+ <artifactId>quartz</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS itself, which the
container build has packaged with 1.6.5 -->
+ </dependency>
+
+ <dependency>
+ <groupId>org.opensymphony.quartz</groupId>
+ <artifactId>quartz-oracle</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement
section. -->
+ <scope>provided</scope> <!-- by JBossAS itself, which the
container build has packaged with 1.6.5 -->
+ </dependency>
+
+ <dependency>
+ <groupId>org.easymock</groupId>
+ <artifactId>easymockclassextension</artifactId>
+ <version>2.2</version>
+ <scope>test</scope>
+ <!-- somehow this is needed otherwise the hibernate stuff doesn't
initialize in our tests -->
+ </dependency>
+
+ <dependency>
+ <groupId>org.snmp4j</groupId>
+ <artifactId>snmp4j</artifactId>
+ <version>1.8.2</version>
+ </dependency>
+
+ <!-- required by RHQ server classes, as well as EJB3 Embedded -->
+ <dependency>
+ <groupId>oswego-concurrent</groupId>
+ <artifactId>concurrent</artifactId>
+ <version>1.3.4</version>
+ </dependency>
+
+ <!-- TODO: Why is this needed? -->
+ <dependency>
+ <groupId>postgresql</groupId>
+ <artifactId>postgresql</artifactId>
+ <!--<scope>test</scope>-->
+ </dependency>
+
+ <dependency>
+ <groupId>rss4j</groupId>
+ <artifactId>rss4j</artifactId>
+ <version>0.92-on.2</version>
+ </dependency>
+
+ <dependency>
+ <groupId>tomcat</groupId>
+ <artifactId>catalina</artifactId>
+ <version>5.5.20</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>tomcat</groupId>
+ <artifactId>tomcat-jk</artifactId>
+ <version>4.1.31</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Needed by com.jboss.jbossnetwork.apl.actions.xml.XPathProcessor; TODO:
Remove once APL has been excised. -->
+ <dependency>
+ <groupId>xalan</groupId>
+ <artifactId>xalan</artifactId>
+ <version>2.5.1</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>com.jcraft</groupId>
+ <artifactId>jsch</artifactId>
+ <version>0.1.29</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.el</groupId>
+ <artifactId>jboss-el</artifactId>
+ <version>2.0.1.GA</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.freemarker</groupId>
+ <artifactId>freemarker</artifactId>
+ <version>2.3.18</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-core-dbutils</artifactId>
+ <version>${project.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>ant</groupId>
+ <artifactId>ant</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <testResources>
+ <testResource>
+ <directory>src/test/resources</directory>
+ <filtering>true</filtering>
+ </testResource>
+ </testResources>
+
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+
+ <execution>
+ <phase>process-classes</phase>
+ <configuration>
+ <tasks>
+ <!-- generate the I18N resource bundles -->
+ <taskdef name="i18n"
classpathref="maven.runtime.classpath"
classname="mazz.i18n.ant.I18NAntTask" />
+
+ <i18n outputdir="${project.build.outputDirectory}"
defaultlocale="en" verbose="false" append="false"
verify="true">
+ <classpath refid="maven.runtime.classpath" />
+ <classfileset
dir="${project.build.outputDirectory}">
+ <include
name="**/ServerI18NResourceKeys.class" />
+ <include name="**/AlertI18NResourceKeys.class"
/>
+ </classfileset>
+ </i18n>
+
+ <!-- create our rhq-server-version.properties file that goes
in our jar -->
+ <tstamp>
+ <format property="build.time"
pattern="dd.MMM.yyyy HH.mm.ss z" />
+ </tstamp>
+
+ <echo
file="${project.build.outputDirectory}/rhq-server-version.properties"
append="false">Product-Name=${rhq.product.name}
+Product-Version=${project.version}
+Module-Name=${project.name}
+Module-Version=${project.version}
+Build-Number=${buildNumber}
+Build-Date=${build.time}
+Build-Jdk-Vendor=${java.vendor}
+Build-Jdk=${java.version}
+Build-OS-Name=${os.name}
+Build-OS-Version=${os.version}
+</echo>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ <!-- in order to get JMS to work properly in embedded test container,
extract jms-rs.rar classes -->
+ <execution>
+ <id>Extract JMS classes from RAR needed for JMS tests</id>
+ <phase>process-classes</phase>
+ <configuration>
+ <tasks>
+ <unzip src="src/test/resources/jms-ra.rar"
dest="target">
+ <patternset>
+ <include name="jms-ra.jar"/>
+ </patternset>
+ </unzip>
+ <unzip src="target/jms-ra.jar"
dest="target/test-classes">
+ <patternset>
+ <include name="org/**"/>
+ </patternset>
+ </unzip>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginService.java
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginService.java
new file mode 100644
index 0000000..64c6537
--- /dev/null
+++
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginService.java
@@ -0,0 +1,146 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2011 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.drift;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
+import org.rhq.core.domain.plugin.PluginKey;
+import org.rhq.core.domain.plugin.PluginStatusType;
+import org.rhq.core.domain.plugin.ServerPlugin;
+import org.rhq.core.util.MessageDigestGenerator;
+import org.rhq.enterprise.server.plugin.pc.AbstractTypeServerPluginContainer;
+import org.rhq.enterprise.server.plugin.pc.MasterServerPluginContainer;
+import org.rhq.enterprise.server.plugin.pc.MasterServerPluginContainerConfiguration;
+import org.rhq.enterprise.server.plugin.pc.ServerPluginEnvironment;
+import org.rhq.enterprise.server.plugin.pc.ServerPluginManager;
+import org.rhq.enterprise.server.plugin.pc.ServerPluginService;
+import org.rhq.enterprise.server.plugin.pc.ServerPluginType;
+import org.rhq.enterprise.server.plugin.pc.drift.DriftServerPluginContainer;
+import org.rhq.enterprise.server.plugin.pc.drift.DriftServerPluginManager;
+import org.rhq.enterprise.server.xmlschema.ServerPluginDescriptorMetadataParser;
+import
org.rhq.enterprise.server.xmlschema.generated.serverplugin.ServerPluginDescriptorType;
+
+public class DriftServerPluginService extends ServerPluginService implements
DriftServerPluginServiceMBean {
+
+ public TestMasterServerPluginContainer master;
+ public MasterServerPluginContainerConfiguration masterConfig;
+
+ public DriftServerPluginService() {
+ // build the config at constructor time so tests have it even before the PC is
initialized
+ File dir = new File(System.getProperty("java.io.tmpdir"),
"test-server-plugins");
+ this.masterConfig = new MasterServerPluginContainerConfiguration(dir, dir, dir,
null);
+ }
+
+ @Override
+ public MasterServerPluginContainer createMasterPluginContainer() {
+ this.master = new TestMasterServerPluginContainer();
+ this.master.initialize(this.masterConfig);
+ return this.master;
+ }
+
+ class TestMasterServerPluginContainer extends MasterServerPluginContainer {
+ @Override
+ protected ClassLoader createRootServerPluginClassLoader() {
+ return getClass().getClassLoader();
+ }
+
+ @Override
+ protected Map<URL, ? extends ServerPluginDescriptorType>
preloadAllPlugins() throws Exception {
+ // if our test never setup any plugins, ignore it and just return an empty
map
+ File pluginDir = getConfiguration().getPluginDirectory();
+ if (pluginDir == null || pluginDir.listFiles() == null ||
pluginDir.listFiles().length == 0) {
+ return new HashMap<URL, ServerPluginDescriptorType>();
+ } else {
+ return super.preloadAllPlugins();
+ }
+ }
+
+ @Override
+ protected List<PluginKey> getDisabledPluginKeys() {
+ // in the real world, the db is checked for enable flag, here we say all
plugins are enabled
+ return new ArrayList<PluginKey>();
+ }
+
+ @Override
+ protected List<AbstractTypeServerPluginContainer> createPluginContainers()
{
+ ArrayList<AbstractTypeServerPluginContainer> pcs = new
ArrayList<AbstractTypeServerPluginContainer>(1);
+ DriftServerPluginContainer driftPC = new
TestDriftServerPluginContainer(this);
+ pcs.add(driftPC);
+
+ return pcs;
+ }
+ }
+
+ class TestDriftServerPluginContainer extends DriftServerPluginContainer {
+ public TestDriftServerPluginContainer(MasterServerPluginContainer master) {
+ super(master);
+ }
+
+ @Override
+ protected ServerPluginManager createPluginManager() {
+ return new TestDriftServerPluginManager(this);
+ }
+ }
+
+ class TestDriftServerPluginManager extends DriftServerPluginManager {
+ public TestDriftServerPluginManager(DriftServerPluginContainer pc) {
+ super(pc);
+ }
+
+ @Override
+ protected ServerPlugin getPlugin(ServerPluginEnvironment env) {
+ try {
+ Configuration pluginConfig = null;
+ Configuration scheduledJobsConfig = null;
+ ConfigurationDefinition configDef;
+
+ ServerPluginDescriptorType pluginDescriptor = env.getPluginDescriptor();
+
+ configDef =
ServerPluginDescriptorMetadataParser.getPluginConfigurationDefinition(pluginDescriptor);
+ if (configDef != null) {
+ pluginConfig = configDef.getDefaultTemplate().createConfiguration();
+ }
+
+ configDef =
ServerPluginDescriptorMetadataParser.getScheduledJobsDefinition(pluginDescriptor);
+ if (configDef != null) {
+ scheduledJobsConfig =
configDef.getDefaultTemplate().createConfiguration();
+ }
+
+ File pluginFile = new File(env.getPluginUrl().toURI());
+ ServerPlugin plugin = new ServerPlugin(0,
env.getPluginKey().getPluginName(), pluginFile.getName(),
+ pluginDescriptor.getDisplayName(), true, PluginStatusType.INSTALLED,
pluginDescriptor
+ .getDescription(), "",
MessageDigestGenerator.getDigestString(pluginFile), pluginDescriptor
+ .getVersion(), pluginDescriptor.getVersion(), pluginConfig,
scheduledJobsConfig,
+ new ServerPluginType(pluginDescriptor).stringify(),
System.currentTimeMillis(), System
+ .currentTimeMillis());
+ return plugin;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+}
diff --git
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginServiceMBean.java
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginServiceMBean.java
new file mode 100644
index 0000000..d38374e
--- /dev/null
+++
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginServiceMBean.java
@@ -0,0 +1,25 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2011 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.drift;
+
+import org.rhq.enterprise.server.plugin.pc.ServerPluginServiceManagement;
+
+public interface DriftServerPluginServiceMBean extends ServerPluginServiceManagement {
+}
diff --git
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerTest.java
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerTest.java
new file mode 100644
index 0000000..7db3365
--- /dev/null
+++
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftServerTest.java
@@ -0,0 +1,241 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2011 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.drift;
+
+import static org.rhq.core.domain.resource.ResourceCategory.SERVER;
+import static org.rhq.enterprise.server.util.LookupUtil.getSubjectManager;
+
+import java.io.File;
+import java.lang.reflect.Method;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.NonUniqueResultException;
+
+import org.apache.commons.io.FileUtils;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.drift.Drift;
+import org.rhq.core.domain.drift.DriftDefinition;
+import org.rhq.core.domain.drift.DriftDefinitionTemplate;
+import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.shared.ResourceBuilder;
+import org.rhq.core.domain.shared.ResourceTypeBuilder;
+import org.rhq.enterprise.server.plugin.ServerPluginsLocal;
+import org.rhq.enterprise.server.test.AbstractEJB3Test;
+import org.rhq.enterprise.server.test.TestServerCommunicationsService;
+import org.rhq.test.TransactionCallback;
+
+@Test(groups = "drift")
+public class DriftServerTest extends AbstractEJB3Test {
+
+ protected final String RESOURCE_TYPE_NAME = getClass().getSimpleName() +
"_RESOURCE_TYPE";
+
+ protected final String AGENT_NAME = getClass().getSimpleName() + "_AGENT";
+
+ protected final String RESOURCE_NAME = getClass().getSimpleName() +
"_RESOURCE";
+
+ private ServerPluginsLocal serverPluginsMgr;
+
+ protected DriftServerPluginService driftServerPluginService;
+
+ protected TestServerCommunicationsService agentServiceContainer;
+
+ protected ResourceType resourceType;
+
+ protected Agent agent;
+
+ protected Resource resource;
+
+ @BeforeMethod
+ public void initServices(Method testMethod) throws Exception {
+ initDriftServer();
+ initAgentServices();
+
+ InitDB annotation = testMethod.getAnnotation(InitDB.class);
+ if (annotation == null || annotation.value()) {
+ initDB();
+ }
+ }
+
+ private void initDriftServer() throws Exception {
+ driftServerPluginService = new DriftServerPluginService();
+ prepareCustomServerPluginService(driftServerPluginService);
+ driftServerPluginService.masterConfig.getPluginDirectory().mkdirs();
+
+ File jpaDriftPlugin = new
File("../plugins/drift-rhq/target/rhq-serverplugin-drift-4.1.0-SNAPSHOT.jar");
+ assertTrue("Drift server plugin JAR file not found at" +
jpaDriftPlugin.getPath(), jpaDriftPlugin.exists());
+ FileUtils.copyFileToDirectory(jpaDriftPlugin,
driftServerPluginService.masterConfig.getPluginDirectory());
+
+ driftServerPluginService.startMasterPluginContainer();
+
+ //serverPluginsMgr = LookupUtil.getServerPlugins();
+ }
+
+ private void initAgentServices() {
+ agentServiceContainer = prepareForTestAgents();
+ agentServiceContainer.driftService = new TestDefService();
+ }
+
+ @AfterMethod(inheritGroups = true)
+ public void shutDownServices() throws Exception {
+ shutDownDriftServer();
+ shutDownAgentServices();
+ }
+
+ private void shutDownDriftServer() throws Exception {
+ unprepareServerPluginService();
+ driftServerPluginService.stopMasterPluginContainer();
+ }
+
+ private void shutDownAgentServices() {
+ agentServiceContainer = null;
+ unprepareForTestAgents();
+ }
+
+ @AfterClass(inheritGroups = true)
+ public void cleanUpDB() throws Exception {
+ purgeDB();
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ purgeDB(getEntityManager());
+ }
+ });
+ }
+
+ private void initDB() throws Exception {
+ purgeDB();
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+ initResourceType();
+ initAgent();
+ initResource();
+
+ em.persist(resourceType);
+ em.persist(agent);
+ resource.setAgent(agent);
+ em.persist(resource);
+
+ initDB(em);
+ }
+ });
+ }
+
+ private void purgeDB() {
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+
+ em.createQuery("delete from JPADrift ").executeUpdate();
+ em.createQuery("delete from
JPADriftChangeSet").executeUpdate();
+ em.createQuery("delete from JPADriftSet").executeUpdate();
+ em.createQuery("delete from JPADriftFile").executeUpdate();
+ em.createQuery("delete from DriftDefinition").executeUpdate();
+ em.createQuery("delete from
DriftDefinitionTemplate").executeUpdate();
+
+ deleteEntity(Resource.class, RESOURCE_NAME, em);
+ deleteEntity(Agent.class, AGENT_NAME, em);
+ deleteEntity(ResourceType.class, RESOURCE_TYPE_NAME, em);
+
+ purgeDB(em);
+ }
+ });
+ }
+
+ protected void purgeDB(EntityManager em) {
+ }
+
+ protected void initDB(EntityManager em) {
+ }
+
+ protected void deleteEntity(Class<?> clazz, String name, EntityManager em) {
+ try {
+ Object entity = em.createQuery(
+ "select entity from " + clazz.getSimpleName() + " entity
where entity.name = :name")
+ .setParameter("name", name)
+ .getSingleResult();
+ em.remove(entity);
+ } catch (NoResultException e) {
+ // we can ignore no results because this code will run when the db
+ // is empty and we expect no results in that case
+ } catch (NonUniqueResultException e) {
+ // we will fail here to let the person running the test know that
+ // the database may not be in a consistent state
+ fail("Purging " + name + " failed. Expected to find one
instance of " + clazz.getSimpleName() +
+ " but found more than one. The database may not be in a consistent
state.");
+ }
+ }
+
+ protected void initResourceType() {
+ resourceType = new ResourceTypeBuilder().createResourceType()
+ .withId(0)
+ .withName(RESOURCE_TYPE_NAME)
+ .withCategory(SERVER)
+ .withPlugin(RESOURCE_TYPE_NAME.toLowerCase())
+ .build();
+ }
+
+ protected void initAgent() {
+ agent = new Agent(AGENT_NAME, "localhost", 1, "", AGENT_NAME
+ "_TOKEN");
+ }
+
+ protected void initResource() {
+ resource = new ResourceBuilder().createResource()
+ .withId(0)
+ .withName(RESOURCE_NAME)
+ .withResourceKey(RESOURCE_NAME)
+ .withRandomUuid()
+ .withResourceType(resourceType)
+ .build();
+ }
+
+ protected Subject getOverlord() {
+ return getSubjectManager().getOverlord();
+ }
+
+ protected String toString(DriftDefinition def) {
+ return "DriftDefinition[id: " + def.getId() + ", name: " +
def.getName() + "]";
+ }
+
+ protected String toString(DriftDefinitionTemplate template) {
+ return DriftDefinitionTemplate.class.getSimpleName() + "[id: " +
template.getId() + ", name: " +
+ template.getName() + "]";
+ }
+
+ protected Drift findDriftByPath(List<? extends Drift> drifts, String path) {
+ for (Drift drift : drifts) {
+ if (drift.getPath().equals(path)) {
+ return drift;
+ }
+ }
+ return null;
+ }
+}
diff --git
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
new file mode 100644
index 0000000..de93b74
--- /dev/null
+++
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
@@ -0,0 +1,603 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2011 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.drift;
+
+import static java.util.Arrays.asList;
+import static org.rhq.core.domain.common.EntityContext.forResource;
+import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
+import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
+import static org.rhq.core.domain.drift.DriftChangeSetCategory.DRIFT;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.normal;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.plannedChanges;
+import static
org.rhq.core.domain.drift.DriftDefinitionComparator.CompareMode.BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS;
+import static
org.rhq.enterprise.server.safeinvoker.HibernateDetachUtility.SerializationType.SERIALIZATION;
+import static org.rhq.enterprise.server.util.LookupUtil.getDriftManager;
+import static org.rhq.enterprise.server.util.LookupUtil.getDriftTemplateManager;
+import static org.rhq.test.AssertUtils.assertPropertiesMatch;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.ejb.EJBException;
+import javax.persistence.EntityManager;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.criteria.DriftDefinitionCriteria;
+import org.rhq.core.domain.criteria.DriftDefinitionTemplateCriteria;
+import org.rhq.core.domain.criteria.GenericDriftChangeSetCriteria;
+import org.rhq.core.domain.criteria.JPADriftChangeSetCriteria;
+import org.rhq.core.domain.drift.Drift;
+import org.rhq.core.domain.drift.DriftChangeSet;
+import org.rhq.core.domain.drift.DriftDefinition;
+import org.rhq.core.domain.drift.DriftDefinitionComparator;
+import org.rhq.core.domain.drift.DriftDefinitionTemplate;
+import org.rhq.core.domain.drift.DriftSnapshot;
+import org.rhq.core.domain.drift.Filter;
+import org.rhq.core.domain.drift.JPADrift;
+import org.rhq.core.domain.drift.JPADriftChangeSet;
+import org.rhq.core.domain.drift.JPADriftFile;
+import org.rhq.core.domain.drift.JPADriftSet;
+import org.rhq.core.domain.resource.Resource;
+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;
+
+public class DriftTemplateManagerBeanTest extends DriftServerTest {
+
+ private DriftTemplateManagerLocal templateMgr;
+
+ private DriftManagerLocal driftMgr;
+
+ private List<Resource> resources = new LinkedList<Resource>();
+
+ private JPADrift drift1;
+ private JPADrift drift2;
+ private JPADriftFile driftFile1;
+ private JPADriftFile driftFile2;
+
+ @BeforeClass
+ public void initClass() {
+ templateMgr = getDriftTemplateManager();
+ driftMgr = getDriftManager();
+
+ }
+
+ @Override
+ protected void initDB(EntityManager em) {
+ agentServiceContainer.driftService = new TestDefService() {
+ @Override
+ public void unscheduleDriftDetection(int resourceId, DriftDefinition
driftDef) {
+ detach(driftDef);
+ }
+
+ @Override
+ public void updateDriftDetection(int resourceId, DriftDefinition driftDef) {
+ detach(driftDef);
+ }
+
+ @Override
+ public void updateDriftDetection(int resourceId, DriftDefinition driftDef,
DriftSnapshot driftSnapshot) {
+ detach(driftDef);
+ detach(driftSnapshot);
+ }
+
+ private void detach(Object object) {
+ try {
+ HibernateDetachUtility.nullOutUninitializedFields(object,
SERIALIZATION);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ };
+ }
+
+ public void createNewTemplate() {
+ final DriftDefinition definition = new DriftDefinition(new Configuration());
+ definition.setName("test::createNewTemplate");
+ definition.setEnabled(true);
+ definition.setDriftHandlingMode(normal);
+ definition.setInterval(2400L);
+ definition.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+
+ final DriftDefinitionTemplate newTemplate =
templateMgr.createTemplate(getOverlord(), resourceType.getId(),
+ true, definition);
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+
+ ResourceType updatedType = em.find(ResourceType.class,
resourceType.getId());
+
+ assertEquals("Failed to add new drift definition to resource
type", 1, updatedType
+ .getDriftDefinitionTemplates().size());
+
+ DriftDefinitionTemplate expectedTemplate = new
DriftDefinitionTemplate();
+ expectedTemplate.setTemplateDefinition(definition);
+ expectedTemplate.setUserDefined(true);
+
+ assertDriftTemplateEquals("Failed to save template",
expectedTemplate, newTemplate);
+ assertTrue("The template should have its id set",
newTemplate.getId() > 0);
+ }
+ });
+ }
+
+ public void createTemplateForNegativeUpdateTests() {
+ DriftDefinition definition = new DriftDefinition(new Configuration());
+ definition.setName("test::createTemplateForNegativeUpdateTests");
+ definition.setEnabled(true);
+ definition.setDriftHandlingMode(normal);
+ definition.setInterval(2400L);
+ definition.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+
+ templateMgr.createTemplate(getOverlord(), resourceType.getId(), true,
definition);
+
+ assertNotNull("Failed to load template",
loadTemplate(definition.getName()));
+ }
+
+ @Test(dependsOnMethods = "createTemplateForNegativeUpdateTests",
+ expectedExceptions = EJBException.class,
+ expectedExceptionsMessageRegExp = ".*base directory.*cannot be
modified")
+ @InitDB(false)
+ public void doNotAllowBaseDirToBeUpdated() {
+ DriftDefinitionTemplate template =
loadTemplate("test::createTemplateForNegativeUpdateTests");
+ DriftDefinition definition = template.getTemplateDefinition();
+ definition.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/TEST"));
+
+ templateMgr.updateTemplate(getOverlord(), template);
+ }
+
+ @Test(dependsOnMethods = "createTemplateForNegativeUpdateTests",
+ expectedExceptions = EJBException.class,
+ expectedExceptionsMessageRegExp = ".*filters.*cannot be modified")
+ @InitDB(false)
+ public void doNotAllowFiltersToBeUpdated() {
+ DriftDefinitionTemplate template =
loadTemplate("test::createTemplateForNegativeUpdateTests");
+ DriftDefinition definition = template.getTemplateDefinition();
+ definition.addExclude(new Filter("/foo/bar/TEST/conf",
"*.xml"));
+
+ templateMgr.updateTemplate(getOverlord(), template);
+ }
+
+ @Test(dependsOnMethods = "createTemplateForNegativeUpdateTests",
+ expectedExceptions = EJBException.class,
+ expectedExceptionsMessageRegExp = ".*name.*cannot be modified")
+ @InitDB(false)
+ public void doNotAllowTemplateNameToBeUpdated() {
+ DriftDefinitionTemplate template =
loadTemplate("test::createTemplateForNegativeUpdateTests");
+ template.setName("A new name");
+
+ templateMgr.updateTemplate(getOverlord(), template);
+ }
+
+ public void createAndUpdateTemplate() {
+ // create the template
+ DriftDefinition definition = new DriftDefinition(new Configuration());
+ definition.setName("test::updateTemplate");
+ definition.setDescription("update template test");
+ definition.setEnabled(true);
+ definition.setDriftHandlingMode(normal);
+ definition.setInterval(2400L);
+ definition.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+
+ DriftDefinitionTemplate template = templateMgr.createTemplate(getOverlord(),
resourceType.getId(), true,
+ definition);
+
+ // next create some definitions from the template
+ final DriftDefinition attachedDef1 = createDefinition(template,
"attachedDef1", true);
+ final DriftDefinition attachedDef2 = createDefinition(template,
"attachedDef2", true);
+ final DriftDefinition detachedDef1 = createDefinition(template,
"detachedDef1", false);
+ final DriftDefinition detachedDef2 = createDefinition(template,
"detachedDef2", false);
+
+ driftMgr.updateDriftDefinition(getOverlord(), forResource(resource.getId()),
attachedDef1);
+ driftMgr.updateDriftDefinition(getOverlord(), forResource(resource.getId()),
attachedDef2);
+ driftMgr.updateDriftDefinition(getOverlord(), forResource(resource.getId()),
detachedDef1);
+ driftMgr.updateDriftDefinition(getOverlord(), forResource(resource.getId()),
detachedDef2);
+
+ // update the template
+ final DriftDefinition newTemplateDef = template.getTemplateDefinition();
+ newTemplateDef.setInterval(4800L);
+ newTemplateDef.setDriftHandlingMode(plannedChanges);
+ newTemplateDef.setEnabled(false);
+
+ templateMgr.updateTemplate(getOverlord(), template);
+
+ // verify that the tempalte has been updated
+ final DriftDefinitionTemplate updatedTemplate =
loadTemplate(template.getName());
+ AssertUtils.assertPropertiesMatch("Failed to update template",
template, updatedTemplate, "resourceType",
+ "driftDefinitions", "templateDefinition");
+
+ // verify that attached definitions are updated.
+ for (DriftDefinition def : asList(attachedDef1, attachedDef2)) {
+ DriftDefinition updatedDef = loadDefinition(def.getId());
+ String msg = "Failed to propagate update to attached definition " +
toString(updatedDef) + " - ";
+ DriftDefinition updatedTemplateDef =
updatedTemplate.getTemplateDefinition();
+
+ assertEquals(msg + "enabled property not updated",
updatedTemplateDef.isEnabled(),
+ updatedDef.isEnabled());
+ assertEquals(msg + "driftHandlingMode property not updated",
+ updatedTemplateDef.getDriftHandlingMode(),
updatedDef.getDriftHandlingMode());
+ assertEquals(msg + "interval property not updated",
updatedTemplateDef.getInterval(),
+ updatedDef.getInterval());
+ }
+
+ // verify that the detached definitions have not been updated.
+ for (DriftDefinition def : asList(detachedDef1, detachedDef2)) {
+ DriftDefinition defAfterUpdate = loadDefinition(def.getId());
+ String msg = "Detached definition " + toString(def) + " should
not get updated - ";
+
+ assertEquals(msg + "enabled property was modified",
def.isEnabled(), defAfterUpdate.isEnabled());
+ assertEquals(msg + "driftHandlingMode property was modified",
def.getDriftHandlingMode(),
+ defAfterUpdate.getDriftHandlingMode());
+ assertEquals(msg + "interval property was modified",
def.getInterval(), defAfterUpdate.getInterval());
+ }
+ }
+
+
+ @SuppressWarnings("unchecked")
+ public void pinTemplate() throws Exception {
+ // First create the template
+ final DriftDefinition templateDef = new DriftDefinition(new Configuration());
+ templateDef.setName("test::pinTemplate");
+ templateDef.setEnabled(true);
+ templateDef.setDriftHandlingMode(normal);
+ templateDef.setInterval(2400L);
+ templateDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+
+ final DriftDefinitionTemplate template =
templateMgr.createTemplate(getOverlord(),
+ resourceType.getId(), true, templateDef);
+
+ // next create some resource level definitions
+ final DriftDefinition attachedDef1 = createDefinition(template,
"attachedDef1", true);
+ final DriftDefinition attachedDef2 = createDefinition(template,
"attachedDef2", true);
+ final DriftDefinition detachedDef1 = createDefinition(template,
"detachedDef1", false);
+ final DriftDefinition detachedDef2 = createDefinition(template,
"detachedDef2", false);
+
+ // create initial change set from which the snapshot will be generated
+ final JPADriftChangeSet changeSet0 = new JPADriftChangeSet(resource, 0, COVERAGE,
attachedDef1);
+
+ driftFile1 = new JPADriftFile("a1b2c3");
+ drift1 = new JPADrift(changeSet0, "drift.1", FILE_ADDED, null,
driftFile1);
+
+ final JPADriftSet driftSet = new JPADriftSet();
+ driftSet.addDrift(drift1);
+
+ // create change set v1
+ driftFile2 = new JPADriftFile("1a2b3c");
+ final JPADriftChangeSet changeSet1 = new JPADriftChangeSet(resource, 1, DRIFT,
attachedDef1);
+ drift2 = new JPADrift(changeSet1, "drift.2", FILE_ADDED, null,
driftFile2);
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+
+ em.persist(attachedDef1);
+
+ em.persist(driftFile1);
+ em.persist(driftFile2);
+
+ em.persist(changeSet0);
+ em.persist(driftSet);
+ changeSet0.setInitialDriftSet(driftSet);
+ em.merge(changeSet0);
+
+ em.persist(changeSet1);
+ em.persist(drift2);
+
+ em.persist(attachedDef2);
+ em.persist(detachedDef1);
+ em.persist(detachedDef2);
+ }
+ });
+
+ // now we pin the snapshot to the template
+ templateMgr.pinTemplate(getOverlord(), template.getId(), attachedDef1.getId(),
1);
+
+ // verify that the template is now pinned
+ DriftDefinitionTemplate updatedTemplate = loadTemplate(template.getName());
+ assertTrue("Template should be marked pinned",
updatedTemplate.isPinned());
+ }
+
+ @Test(dependsOnMethods = "pinTemplate")
+ @InitDB(false)
+ public void persistChangeSetWhenTemplateGetsPinned() throws Exception {
+ DriftDefinitionTemplate template = loadTemplate("test::pinTemplate");
+
+ GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
+ criteria.addFilterId(template.getChangeSetId());
+
+ PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
+ criteria);
+
+ assertEquals("Expected to find change set for pinned template", 1,
changeSets.size());
+
+ JPADriftChangeSet expectedChangeSet = new JPADriftChangeSet(resource, 1,
COVERAGE, null);
+ List<? extends Drift> expectedDrifts = asList(
+ new JPADrift(expectedChangeSet, "drift.1", FILE_ADDED, null,
driftFile1),
+ new JPADrift(expectedChangeSet, drift2.getPath(), FILE_ADDED, null,
driftFile2));
+
+ DriftChangeSet<?> actualChangeSet = changeSets.get(0);
+ List<? extends Drift> actualDrifts = new
ArrayList(actualChangeSet.getDrifts());
+
+ AssertUtils.assertCollectionMatchesNoOrder(
+ "Expected to find drifts from change sets 1 and 2 in the template change
set",
+ (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "newDriftFile");
+
+ // we need to compare the newDriftFile properties separately because
+ // assertCollectionMatchesNoOrder compares properties via equals() and
JPADriftFile
+ // does not implement equals.
+ assertPropertiesMatch(drift1.getNewDriftFile(), findDriftByPath(actualDrifts,
"drift.1").getNewDriftFile(),
+ "The newDriftFile property was not set correctly for " + drift1);
+ assertPropertiesMatch(drift2.getNewDriftFile(), findDriftByPath(actualDrifts,
"drift.2").getNewDriftFile(),
+ "The newDriftFile property was not set correctly for " + drift1);
+ }
+
+ @Test(dependsOnMethods = "pinTemplate")
+ @InitDB(false)
+ public void updateAttachedDefinitionsWhenTemplateGetsPinned() throws Exception {
+ DriftDefinitionTemplate template = loadTemplate("test::pinTemplate");
+
+ // get the attached definitions
+ List<DriftDefinition> attachedDefs = new
LinkedList<DriftDefinition>();
+ for (DriftDefinition d : template.getDriftDefinitions()) {
+ if (d.isAttached() && (d.getName().equals("attachedDef1")
|| d.getName().equals("attachedDef2"))) {
+ attachedDefs.add(d);
+ }
+ }
+ assertEquals("Failed to get attached definitions for " +
toString(template), 2, attachedDefs.size());
+ assertDefinitionIsPinned(attachedDefs.get(0));
+ assertDefinitionIsPinned(attachedDefs.get(1));
+ }
+
+ @Test(dependsOnMethods = "pinTemplate")
+ @InitDB(false)
+ public void doNotUpdateDetachedDefinitionsWhenTemplateGetsPinned() throws Exception
{
+ DriftDefinitionTemplate template = loadTemplate("test::pinTemplate");
+
+ // get the detached definitions
+ List<DriftDefinition> detachedDefs = new
LinkedList<DriftDefinition>();
+ for (DriftDefinition d : template.getDriftDefinitions()) {
+ if (!d.isAttached() && (d.getName().equals("detachedDef1")
|| d.getName().equals("detachedDef2"))) {
+ detachedDefs.add(d);
+ }
+ }
+ assertEquals("Failed to get detached definitions for " +
toString(template), 2, detachedDefs.size());
+ assertDefinitionIsNotPinned(detachedDefs.get(0));
+ assertDefinitionIsNotPinned(detachedDefs.get(1));
+ }
+
+ public void deleteTemplate() throws Exception {
+ // first create the template
+ final DriftDefinition templateDef = new DriftDefinition(new Configuration());
+ templateDef.setName("test::pinTemplate");
+ templateDef.setEnabled(true);
+ templateDef.setDriftHandlingMode(normal);
+ templateDef.setInterval(2400L);
+ templateDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+
+ final DriftDefinitionTemplate template =
templateMgr.createTemplate(getOverlord(),
+ resourceType.getId(), true, templateDef);
+
+ // next create some resource level definitions
+ final DriftDefinition attachedDef1 = createDefinition(template,
"attachedDef1", true);
+ final DriftDefinition attachedDef2 = createDefinition(template,
"attachedDef2", true);
+ final DriftDefinition detachedDef1 = createDefinition(template,
"detachedDef1", false);
+ final DriftDefinition detachedDef2 = createDefinition(template,
"detachedDef2", false);
+
+ // create some change sets
+ final JPADriftChangeSet changeSet0 = new JPADriftChangeSet(resource, 0, COVERAGE,
attachedDef1);
+
+ driftFile1 = new JPADriftFile("a1b2c3");
+ drift1 = new JPADrift(changeSet0, "drift.1", FILE_ADDED, null,
driftFile1);
+
+ final JPADriftSet driftSet0 = new JPADriftSet();
+ driftSet0.addDrift(drift1);
+
+ final JPADriftChangeSet changeSet1 = new JPADriftChangeSet(resource, 0, DRIFT,
detachedDef1);
+
+ driftFile2 = new JPADriftFile("1a2b3c");
+ drift2 = new JPADrift(changeSet1, "drift.2", FILE_ADDED, null,
driftFile2);
+
+ final JPADriftSet driftSet1 = new JPADriftSet();
+ driftSet1.addDrift(drift2);
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+
+ em.persist(attachedDef1);
+ em.persist(attachedDef2);
+ em.persist(detachedDef1);
+ em.persist(detachedDef2);
+
+ em.persist(driftFile1);
+ em.persist(driftFile2);
+
+ em.persist(changeSet0);
+ em.persist(driftSet0);
+ changeSet0.setInitialDriftSet(driftSet0);
+ em.merge(changeSet0);
+
+ em.persist(changeSet1);
+ em.persist(driftSet1);
+ changeSet1.setInitialDriftSet(driftSet1);
+ em.merge(changeSet1);
+ }
+ });
+
+ // delete the template
+ templateMgr.deleteTemplate(getOverlord(), template.getId());
+
+ // verify that attached definitions along with their change sets have
+ // been deleted
+ assertNull("Change sets belonging to attached definitions should be
deleted", loadChangeSet(changeSet0.getId()));
+ assertNull("Attached definition " + toString(attachedDef1) + "
should be deleted",
+ loadDefinition(attachedDef1.getId()));
+ assertNull("Attached definition " + toString(attachedDef2) + "
should be deleted",
+ loadDefinition(attachedDef2.getId()));
+
+ // verify that detached definitions along with their change sets have not been
deleted
+ assertNotNull("Change sets belonging to detached definitions should not be
deleted",
+ loadChangeSet(changeSet1.getId()));
+ assertDetachedDefinitionNotDeleted(detachedDef1.getId());
+ assertDetachedDefinitionNotDeleted(detachedDef2.getId());
+
+ // verify that the template itself has been deleted
+ assertNull("The template " + toString(template) + " should have
been deleted",
+ loadTemplate(template.getName(), false));
+ }
+
+ private void assertDefinitionIsPinned(DriftDefinition definition) throws Exception {
+ // verify that the definition is marked as pinned
+ assertTrue("Expected " + toString(definition) + " to be
pinned", definition.isPinned());
+
+ // verify that the initial change set is generated for the definition
+ JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
+ criteria.addFilterDriftDefinitionId(definition.getId());
+ criteria.addFilterCategory(COVERAGE);
+ criteria.fetchDrifts(true);
+
+ PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
+ criteria);
+ assertEquals("Expected to find one change set", 1, changeSets.size());
+
+ JPADriftChangeSet expectedChangeSet = new JPADriftChangeSet(resource, 1,
COVERAGE, null);
+ List<? extends Drift> expectedDrifts = asList(
+ new JPADrift(expectedChangeSet, drift1.getPath(), FILE_ADDED, null,
driftFile1),
+ new JPADrift(expectedChangeSet, drift2.getPath(), FILE_ADDED, null,
driftFile2));
+
+ DriftChangeSet<?> actualChangeSet = changeSets.get(0);
+ List<? extends Drift> actualDrifts = new
ArrayList(actualChangeSet.getDrifts());
+
+ AssertUtils.assertCollectionMatchesNoOrder(
+ "Expected to find drifts from change sets 1 and 2 in the template change
set",
+ (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "newDriftFile");
+
+ // Finally make sure that there are no other change sets
+ criteria = new JPADriftChangeSetCriteria();
+ criteria.addFilterStartVersion(1);
+ criteria.addFilterDriftDefinitionId(definition.getId());
+
+ assertEquals("There should not be any drift change sets", 0,
+ driftMgr.findDriftChangeSetsByCriteria(getOverlord(), criteria).size());
+ }
+
+ private void assertDefinitionIsNotPinned(DriftDefinition definition) throws Exception
{
+ // verify that the definition is not pinned
+ assertFalse("Expected " + toString(definition) + " to be
unpinned", definition.isPinned());
+
+ // Note that this method assumes that the definition has no change sets
+ // associated with it and therefore checks that there are no change sets.
+ JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
+ criteria.addFilterDriftDefinitionId(definition.getId());
+
+ PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
+ criteria);
+ assertEquals("Did not expect to find any change sets for " +
toString(definition) + ". Note that this " +
+ "assertion method assumes that the definition you are testing is not
supposed to have any change sets.",
+ 0, changeSets.size());
+ }
+
+ private void assertDriftTemplateEquals(String msg, DriftDefinitionTemplate expected,
DriftDefinitionTemplate actual) {
+ AssertUtils
+ .assertPropertiesMatch(msg + ": basic drift definition template
properties do not match", expected, actual,
+ "id", "resourceType", "ctime",
"templateDefinition");
+ assertDriftDefEquals(msg + ": template definitions do not match",
expected.getTemplateDefinition(), actual
+ .getTemplateDefinition());
+ }
+
+ private void assertDriftDefEquals(String msg, DriftDefinition expected,
DriftDefinition actual) {
+ DriftDefinitionComparator comparator = new DriftDefinitionComparator(
+ BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS);
+ assertEquals(msg, 0, comparator.compare(expected, actual));
+ }
+
+ private void assertDetachedDefinitionNotDeleted(int definitionId) {
+ DriftDefinition definition = loadDefinition(definitionId);
+ assertNotNull("Detached definition " + toString(definition) + "
should not be deleted", definition);
+ assertNull("The detached definition's template reference should be set
to null when the template is deleted",
+ definition.getTemplate());
+ }
+
+ private DriftDefinition createDefinition(DriftDefinitionTemplate template, String
defName, boolean isAttached) {
+ DriftDefinition def = template.createDefinition();
+ def.setName(defName);
+ def.setAttached(isAttached);
+ def.setTemplate(template);
+ def.setResource(resource);
+ return def;
+ }
+
+ private DriftDefinitionTemplate loadTemplate(String name) {
+ return loadTemplate(name, true);
+ }
+
+ private DriftDefinitionTemplate loadTemplate(String name, boolean
verifyResultsUnique) {
+ DriftDefinitionTemplateCriteria criteria = new
DriftDefinitionTemplateCriteria();
+ criteria.addFilterResourceTypeId(resourceType.getId());
+ criteria.addFilterName(name);
+ criteria.fetchDriftDefinitions(true);
+
+ PageList<DriftDefinitionTemplate> templates =
templateMgr.findTemplatesByCriteria(getOverlord(), criteria);
+ if (verifyResultsUnique) {
+ assertEquals("Expected to find one template", 1,
templates.size());
+ }
+
+ if (templates.isEmpty()) {
+ return null;
+ }
+ return templates.get(0);
+ }
+
+ private DriftDefinition loadDefinition(int definitionId) {
+ DriftDefinitionCriteria criteria = new DriftDefinitionCriteria();
+ criteria.addFilterId(definitionId);
+ criteria.fetchConfiguration(true);
+ criteria.fetchTemplate(true);
+ PageList<DriftDefinition> definitions =
driftMgr.findDriftDefinitionsByCriteria(getOverlord(), criteria);
+
+ if (definitions.isEmpty()) {
+ return null;
+ }
+ return definitions.get(0);
+ }
+
+ private DriftChangeSet<?> loadChangeSet(String id) throws Exception {
+ GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
+ criteria.addFilterId(id);
+ PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
+ criteria);
+
+ if (changeSets.isEmpty()) {
+ return null;
+ }
+ return changeSets.get(0);
+ }
+
+}
diff --git
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/InitDB.java
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/InitDB.java
new file mode 100644
index 0000000..65a6523
--- /dev/null
+++
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/InitDB.java
@@ -0,0 +1,32 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2011 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.drift;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+@Retention(RUNTIME)
+(a)Target({ElementType.METHOD })
+public @interface InitDB {
+ boolean value() default true;
+}
diff --git
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
new file mode 100644
index 0000000..4faca1b
--- /dev/null
+++
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
@@ -0,0 +1,309 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2011 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.drift;
+
+import static java.util.Arrays.asList;
+import static org.apache.commons.io.IOUtils.toInputStream;
+import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
+import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.normal;
+import static org.rhq.core.domain.drift.DriftFileStatus.LOADED;
+import static org.rhq.enterprise.server.util.LookupUtil.getJPADriftServer;
+import static org.rhq.test.AssertUtils.assertPropertiesMatch;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.persistence.EntityManager;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.criteria.JPADriftChangeSetCriteria;
+import org.rhq.core.domain.drift.Drift;
+import org.rhq.core.domain.drift.DriftDefinition;
+import org.rhq.core.domain.drift.JPADrift;
+import org.rhq.core.domain.drift.JPADriftChangeSet;
+import org.rhq.core.domain.drift.JPADriftFile;
+import org.rhq.core.domain.drift.JPADriftSet;
+import org.rhq.core.domain.drift.dto.DriftChangeSetDTO;
+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;
+
+public class JPADriftServerBeanTest extends DriftServerTest {
+
+ private JPADriftServerLocal jpaDriftServer;
+
+ private final String DRIFT_FILE_1_ID = "a1b2c3d4";
+
+ private final String DRIFT_FILE_2_ID = "1ab2b3c4d";
+
+ private JPADriftFile driftFile1;
+
+ private JPADriftFile driftFile2;
+
+ @BeforeClass
+ public void initTests() {
+ jpaDriftServer = getJPADriftServer();
+ }
+
+ @BeforeMethod
+ public void persistDriftFiles() throws Exception {
+ driftFile1 = jpaDriftServer.persistDriftFile(new JPADriftFile(DRIFT_FILE_1_ID));
+ driftFile2 = jpaDriftServer.persistDriftFile(new JPADriftFile(DRIFT_FILE_2_ID));
+
+ String driftFile1Content = "drift file 1 content...";
+ String driftFile2Content = "drift file 2 content...";
+
+ jpaDriftServer.persistDriftFileData(driftFile1, toInputStream(driftFile1Content),
driftFile1Content.length());
+ jpaDriftServer.persistDriftFileData(driftFile2, toInputStream(driftFile2Content),
driftFile2Content.length());
+
+ driftFile1 = jpaDriftServer.getDriftFile(getOverlord(), DRIFT_FILE_1_ID);
+ driftFile2 = jpaDriftServer.getDriftFile(getOverlord(), DRIFT_FILE_2_ID);
+
+ assertDriftFilePersisted(driftFile1, "driftFile1", driftFile1Content);
+ assertDriftFilePersisted(driftFile2, "driftFile2", driftFile2Content);
+ }
+
+ public void persistResourceChangeSet() {
+ // first create and persist the drift definition
+ final DriftDefinition driftDef = new DriftDefinition(new Configuration());
+ driftDef.setName("test::persistResourceChangeSet");
+ driftDef.setEnabled(true);
+ driftDef.setDriftHandlingMode(normal);
+ driftDef.setInterval(2400L);
+ driftDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+ driftDef.setResource(resource);
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+ em.persist(driftDef);
+ }
+ });
+
+ // create the change set to be persisted
+ DriftChangeSetDTO changeSet = new DriftChangeSetDTO();
+ changeSet.setCategory(COVERAGE);
+ changeSet.setVersion(1);
+ changeSet.setDriftDefinitionId(driftDef.getId());
+ changeSet.setResourceId(resource.getId());
+ changeSet.setDriftHandlingMode(normal);
+ changeSet.setCtime(System.currentTimeMillis());
+
+ DriftDTO drift1 = new DriftDTO();
+ drift1.setCategory(FILE_ADDED);
+ drift1.setPath("drift.1");
+ drift1.setChangeSet(changeSet);
+ drift1.setCtime(System.currentTimeMillis());
+ drift1.setNewDriftFile(toDTo(driftFile1));
+
+ DriftDTO drift2 = new DriftDTO();
+ drift2.setCategory(FILE_ADDED);
+ drift2.setPath("drift.2");
+ drift2.setChangeSet(changeSet);
+ drift2.setCtime(System.currentTimeMillis());
+ drift2.setNewDriftFile(toDTo(driftFile2));
+
+ Set<DriftDTO> drifts = new HashSet<DriftDTO>();
+ drifts.add(drift1);
+ drifts.add(drift2);
+ changeSet.setDrifts(drifts);
+
+ String newChangeSetId = jpaDriftServer.persistChangeSet(getOverlord(),
changeSet);
+
+ // verify that the change set was persisted
+ JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
+ criteria.addFilterId(newChangeSetId);
+ criteria.fetchDrifts(true);
+
+ PageList<JPADriftChangeSet> changeSets =
jpaDriftServer.findDriftChangeSetsByCriteria(getOverlord(), criteria);
+ assertEquals("Expected to find one change set", 1, changeSets.size());
+
+ JPADriftChangeSet jpaChangeSet = changeSets.get(0);
+ assertEquals("Expected change set to contain two drifts. This could be a
result of the change set not being " +
+ "persisted correctly or the criteria fetch being done
incorrectly.", 2, jpaChangeSet.getDrifts().size());
+
+ AssertUtils
+ .assertPropertiesMatch("The change set was not persisted correctly",
changeSet, jpaChangeSet, "id", "drifts",
+ "class", "ctime");
+
+ List<? extends Drift> expectedDrifts = asList(drift1, drift2);
+ List<? extends Drift> actualDrifts = new
ArrayList(jpaChangeSet.getDrifts());
+
+ // We ignore the id and ctime properties because those are set by
JPADriftServerBean
+ // and are somewhat implmentation specific. We ignore the directory property
because
+ // it is really a calculated property. newDriftFile has to be compared
separately
+ // since it does not implement equals.
+ AssertUtils.assertCollectionMatchesNoOrder("The change set drifts were not
persisted correctly",
+ (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "directory",
+ "newDriftFile", "class");
+
+ assertPropertiesMatch("The newDriftFile property was not set correctly for
" + drift1, drift1.getNewDriftFile(),
+ findDriftByPath(actualDrifts, "drift.1").getNewDriftFile(),
"class", "ctime") ;
+ assertPropertiesMatch("The newDriftFile property was not set correctly for
" + drift2, drift2.getNewDriftFile(),
+ findDriftByPath(actualDrifts, "drift.2").getNewDriftFile(),
"class", "ctime") ;
+ }
+
+ public void persistTemplateChangeSet() {
+ // create the change set to be persisted
+ //
+ // Note that we do not set the drift definition id or resource id since
+ // the change set is not owned by a resource. It is owned by the
+ // resource type.
+ DriftChangeSetDTO changeSet = new DriftChangeSetDTO();
+ changeSet.setCategory(COVERAGE);
+ changeSet.setVersion(1);
+ changeSet.setDriftHandlingMode(normal);
+ changeSet.setCtime(System.currentTimeMillis());
+
+ DriftDTO drift1 = new DriftDTO();
+ drift1.setCategory(FILE_ADDED);
+ drift1.setPath("drift.1");
+ drift1.setChangeSet(changeSet);
+ drift1.setCtime(System.currentTimeMillis());
+ drift1.setNewDriftFile(toDTo(driftFile1));
+
+ DriftDTO drift2 = new DriftDTO();
+ drift2.setCategory(FILE_ADDED);
+ drift2.setPath("drift.2");
+ drift2.setChangeSet(changeSet);
+ drift2.setCtime(System.currentTimeMillis());
+ drift2.setNewDriftFile(toDTo(driftFile2));
+
+ Set<DriftDTO> drifts = new HashSet<DriftDTO>();
+ drifts.add(drift1);
+ drifts.add(drift2);
+ changeSet.setDrifts(drifts);
+
+ String newChangeSetId = jpaDriftServer.persistChangeSet(getOverlord(),
changeSet);
+
+ // verify that the change set was persisted
+ JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
+ criteria.addFilterId(newChangeSetId);
+ criteria.fetchDrifts(true);
+
+ PageList<JPADriftChangeSet> changeSets =
jpaDriftServer.findDriftChangeSetsByCriteria(getOverlord(), criteria);
+ assertEquals("Expected to find one change set", 1, changeSets.size());
+
+ JPADriftChangeSet jpaChangeSet = changeSets.get(0);
+ assertEquals("Expected change set to contain two drifts. This could be a
result of the change set not being " +
+ "persisted correctly or the criteria fetch being done
incorrectly.", 2, jpaChangeSet.getDrifts().size());
+
+ AssertUtils
+ .assertPropertiesMatch("The change set was not persisted correctly",
changeSet, jpaChangeSet, "id", "drifts",
+ "class", "ctime");
+
+ List<? extends Drift> expectedDrifts = asList(drift1, drift2);
+ List<? extends Drift> actualDrifts = new
ArrayList(jpaChangeSet.getDrifts());
+
+ // We ignore the id and ctime properties because those are set by
JPADriftServerBean
+ // and are somewhat implmentation specific. We ignore the directory property
because
+ // it is really a calculated property. newDriftFile has to be compared
separately
+ // since it does not implement equals.
+ AssertUtils.assertCollectionMatchesNoOrder("The change set drifts were not
persisted correctly",
+ (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "directory",
+ "newDriftFile", "class");
+
+ assertPropertiesMatch("The newDriftFile property was not set correctly for
" + drift1, drift1.getNewDriftFile(),
+ findDriftByPath(actualDrifts, "drift.1").getNewDriftFile(),
"class", "ctime") ;
+ assertPropertiesMatch("The newDriftFile property was not set correctly for
" + drift2, drift2.getNewDriftFile(),
+ findDriftByPath(actualDrifts, "drift.2").getNewDriftFile(),
"class", "ctime") ;
+ }
+
+ public void copyChangeSet() {
+ // first create the change set that will be copied
+ final JPADriftChangeSet changeSet = new JPADriftChangeSet(null, 0, COVERAGE,
null);
+ changeSet.setDriftHandlingMode(normal);
+
+ final JPADrift drift1 = new JPADrift(changeSet, "drift.1", FILE_ADDED,
null, driftFile1);
+ final JPADrift drift2 = new JPADrift(changeSet, "drift.2", FILE_ADDED,
null, driftFile2);
+
+ final JPADriftSet driftSet = new JPADriftSet();
+ driftSet.addDrift(drift1);
+ driftSet.addDrift(drift2);
+
+ // next create the drift definition
+ final DriftDefinition driftDef = new DriftDefinition(new Configuration());
+ driftDef.setName("test::copyChangeSet");
+ driftDef.setEnabled(true);
+ driftDef.setDriftHandlingMode(normal);
+ driftDef.setInterval(2400L);
+ driftDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+ driftDef.setResource(resource);
+
+ // persist the change set and drift definition
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+ em.persist(changeSet);
+ em.persist(driftDef);
+ em.persist(driftSet);
+ changeSet.setInitialDriftSet(driftSet);
+ em.merge(changeSet);
+ }
+ });
+
+ jpaDriftServer.copyChangeSet(getOverlord(), changeSet.getId(), driftDef.getId(),
resource.getId());
+
+ // verify that the change set was created for the definition
+ JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
+ criteria.addFilterDriftDefinitionId(driftDef.getId());
+ criteria.addFilterCategory(COVERAGE);
+
+ PageList<JPADriftChangeSet> changeSets =
jpaDriftServer.findDriftChangeSetsByCriteria(getOverlord(), criteria);
+
+ assertEquals("Expected to get back one change set",
1,changeSets.size());
+
+ JPADriftChangeSet newChangeSet = changeSets.get(0);
+ Set<JPADrift> expectedDrifts = new HashSet<JPADrift>(asList(drift1,
drift2));
+ Set<JPADrift> actualDrifts = newChangeSet.getDrifts();
+
+ AssertUtils.assertCollectionMatchesNoOrder("The change set drifts were not
copied correctly", expectedDrifts,
+ actualDrifts,
+ "changeSet", "newDriftFile");
+ }
+
+ private DriftFileDTO toDTo(JPADriftFile driftFile) {
+ DriftFileDTO dto = new DriftFileDTO();
+ dto.setHashId(driftFile.getHashId());
+ dto.setDataSize(driftFile.getDataSize());
+ dto.setStatus(driftFile.getStatus());
+ return dto;
+ }
+
+
+ private void assertDriftFilePersisted(JPADriftFile driftFile, String name, String
content) {
+ assertNotNull("Failed to get " + name + " Was it persisted?",
driftFile);
+ assertEquals("The content for " + name + " is wrong",
content, jpaDriftServer.getDriftFileBits(
+ driftFile.getHashId()));
+ assertEquals("The drift file status is wrong", LOADED,
driftFile.getStatus());
+ }
+
+}
diff --git
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
new file mode 100644
index 0000000..66afcb0
--- /dev/null
+++
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
@@ -0,0 +1,223 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2011 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.drift;
+
+import static java.util.Arrays.asList;
+import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
+import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.normal;
+import static
org.rhq.core.domain.drift.DriftDefinitionComparator.CompareMode.BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS;
+import static org.rhq.enterprise.server.util.LookupUtil.getDriftManager;
+import static org.rhq.enterprise.server.util.LookupUtil.getDriftTemplateManager;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import javax.persistence.EntityManager;
+
+import org.testng.annotations.BeforeClass;
+
+import org.rhq.core.domain.common.EntityContext;
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.criteria.DriftDefinitionCriteria;
+import org.rhq.core.domain.criteria.JPADriftChangeSetCriteria;
+import org.rhq.core.domain.drift.Drift;
+import org.rhq.core.domain.drift.DriftChangeSet;
+import org.rhq.core.domain.drift.DriftConfigurationDefinition;
+import org.rhq.core.domain.drift.DriftDefinition;
+import org.rhq.core.domain.drift.DriftDefinitionComparator;
+import org.rhq.core.domain.drift.DriftDefinitionTemplate;
+import org.rhq.core.domain.drift.DriftSnapshot;
+import org.rhq.core.domain.drift.JPADrift;
+import org.rhq.core.domain.drift.JPADriftChangeSet;
+import org.rhq.core.domain.drift.JPADriftFile;
+import org.rhq.core.domain.drift.JPADriftSet;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.server.safeinvoker.HibernateDetachUtility;
+import org.rhq.test.AssertUtils;
+import org.rhq.test.TransactionCallback;
+
+public class ManageDriftDefinitionsTest extends DriftServerTest {
+
+ private DriftManagerLocal driftMgr;
+
+ private DriftTemplateManagerLocal templateMgr;
+
+ @BeforeClass
+ public void initClass() throws Exception {
+ driftMgr = getDriftManager();
+ templateMgr = getDriftTemplateManager();
+ }
+
+ public void createDefinitionFromUnpinnedTemplate() {
+ // first create a template
+ final DriftDefinition templateDef = new DriftDefinition(new Configuration());
+ templateDef.setName("test_createUnpinnedDefinition");
+ templateDef.setEnabled(true);
+ templateDef.setDriftHandlingMode(normal);
+ templateDef.setInterval(2400L);
+ templateDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+
+ // persist the template
+ DriftDefinitionTemplate template = templateMgr.createTemplate(getOverlord(),
resourceType.getId(), false,
+ templateDef);
+
+ // create and persist the definition
+ DriftDefinition definition = template.createDefinition();
+ definition.setTemplate(template);
+ driftMgr.updateDriftDefinition(getOverlord(),
EntityContext.forResource(resource.getId()), definition);
+
+ // verify that the definition was created
+ DriftDefinition newDef = loadDefinition(definition.getName());
+ DriftDefinitionComparator comparator = new DriftDefinitionComparator(
+ BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS);
+
+ assertEquals("The drift definition was not persisted correctly", 0,
comparator.compare(definition, newDef));
+ assertEquals("The template association was not set on the definition",
template, newDef.getTemplate());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void createDefinitionFromPinnedTemplate() throws Exception {
+ // We first need to create a pinned template. Users can only create a pinned
+ // template from a snapshot of an existing resource-level drift definition.
+ // We are going to take a bit of a short cut though by directly creating
+ // and persisting the pinned change set.
+
+ // first create the change set
+ final JPADriftChangeSet changeSet0 = new JPADriftChangeSet(null, 0, COVERAGE,
null);
+
changeSet0.setDriftHandlingMode(DriftConfigurationDefinition.DriftHandlingMode.normal);
+
+ final JPADriftFile driftFile1 = new JPADriftFile("a1b2c3");
+ final JPADriftFile driftFile2 = new JPADriftFile("1a2b3c");
+
+ JPADrift drift1 = new JPADrift(changeSet0, "drift.1", FILE_ADDED, null,
driftFile1);
+ JPADrift drift2 = new JPADrift(changeSet0, "drift.2", FILE_ADDED, null,
driftFile2);
+
+ final JPADriftSet driftSet = new JPADriftSet();
+ driftSet.addDrift(drift1);
+ driftSet.addDrift(drift2);
+
+ // create the template
+ final DriftDefinition templateDef = new DriftDefinition(new Configuration());
+ templateDef.setName("test_createUnpinnedDefinition");
+ templateDef.setEnabled(true);
+ templateDef.setDriftHandlingMode(normal);
+ templateDef.setInterval(2400L);
+ templateDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+ templateDef.setPinned(true);
+
+ final DriftDefinitionTemplate template =
templateMgr.createTemplate(getOverlord(), resourceType.getId(), true,
+ templateDef);
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+
+ em.persist(driftFile1);
+ em.persist(driftFile2);
+ em.persist(changeSet0);
+ em.persist(driftSet);
+ changeSet0.setInitialDriftSet(driftSet);
+ em.merge(changeSet0);
+
+ // setting the change set id on the template is the last and the
+ // most important step in making the template pinned
+ template.setChangeSetId(changeSet0.getId());
+ em.merge(template);
+ }
+ });
+
+ // Create and persist a resource-level definition.
+ final DriftDefinition definition = template.createDefinition();
+ definition.setTemplate(template);
+
+ final AtomicBoolean agentInvoked = new AtomicBoolean(false);
+
+ agentServiceContainer.driftService = new TestDefService() {
+ @Override
+ public void updateDriftDetection(int resourceId, DriftDefinition driftDef,
DriftSnapshot snapshot) {
+ try {
+ HibernateDetachUtility.nullOutUninitializedFields(driftDef,
+ HibernateDetachUtility.SerializationType.SERIALIZATION);
+ HibernateDetachUtility.nullOutUninitializedFields(snapshot,
+ HibernateDetachUtility.SerializationType.SERIALIZATION);
+ agentInvoked.set(true);
+ assertNotNull("Expected snapshot drift instances collection to
be non-null",
+ snapshot.getDriftInstances());
+ assertEquals("Expected snapshot to contain two drift
entries", 2, snapshot.getDriftInstances().size());
+ } catch (Exception e) {
+ String msg = "Do not pass attached entites to agent since those
entities are outside of " +
+ "Hibernate's control. The persistence context should be
flushed and cleared to ensure that " +
+ "only detached objects are sent to the agent";
+ throw new RuntimeException(msg, e);
+ }
+ }
+ };
+
+ driftMgr.updateDriftDefinition(getOverlord(),
EntityContext.forResource(resource.getId()), definition);
+
+ DriftDefinition newDef = loadDefinition(definition.getName());
+
+ // verify that the definition is marked as pinned
+ assertTrue("The drift definition should be marked as pinned",
newDef.isPinned());
+
+ // verify that the initial change set is generated for the definition
+ JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
+ criteria.addFilterDriftDefinitionId(definition.getId());
+ criteria.addFilterCategory(COVERAGE);
+ criteria.fetchDrifts(true);
+
+ PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
+ criteria);
+ assertEquals("Expected to find one change set", 1, changeSets.size());
+
+ JPADriftChangeSet expectedChangeSet = new JPADriftChangeSet(resource, 1,
COVERAGE, null);
+ List<? extends Drift> expectedDrifts = asList(
+ new JPADrift(expectedChangeSet, drift1.getPath(), FILE_ADDED, null,
driftFile1),
+ new JPADrift(expectedChangeSet, drift2.getPath(), FILE_ADDED, null,
driftFile2));
+
+ DriftChangeSet<?> actualChangeSet = changeSets.get(0);
+ List<? extends Drift> actualDrifts = new
ArrayList(actualChangeSet.getDrifts());
+
+ AssertUtils.assertCollectionMatchesNoOrder(
+ "Expected to find drifts from change sets 1 and 2 in the template change
set",
+ (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "newDriftFile");
+
+ // lastly verify that the agent is called
+ assertTrue("Failed to send drift definition along with snapshot to
agent", agentInvoked.get());
+ }
+
+ private DriftDefinition loadDefinition(String name) {
+ DriftDefinitionCriteria criteria = new DriftDefinitionCriteria();
+ criteria.addFilterResourceIds(resource.getId());
+ criteria.addFilterName(name);
+ criteria.fetchConfiguration(true);
+ criteria.fetchResource(true);
+ criteria.fetchTemplate(true);
+
+ PageList<DriftDefinition> driftDefs =
driftMgr.findDriftDefinitionsByCriteria(getOverlord(), criteria);
+ assertEquals("Expected to find one drift definition", 1,
driftDefs.size());
+
+ return driftDefs.get(0);
+ }
+}
diff --git
a/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
new file mode 100644
index 0000000..e7341e4
--- /dev/null
+++
b/modules/enterprise/server/integration-tests/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
@@ -0,0 +1,236 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2011 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.drift;
+
+import static java.util.Arrays.asList;
+import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
+import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
+import static org.rhq.core.domain.drift.DriftChangeSetCategory.DRIFT;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.normal;
+import static org.rhq.enterprise.server.util.LookupUtil.getDriftManager;
+import static org.rhq.enterprise.server.util.LookupUtil.getDriftTemplateManager;
+import static org.rhq.test.AssertUtils.assertPropertiesMatch;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import javax.persistence.EntityManager;
+
+import org.testng.annotations.BeforeClass;
+
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.criteria.GenericDriftChangeSetCriteria;
+import org.rhq.core.domain.drift.Drift;
+import org.rhq.core.domain.drift.DriftChangeSet;
+import org.rhq.core.domain.drift.DriftDefinition;
+import org.rhq.core.domain.drift.DriftSnapshot;
+import org.rhq.core.domain.drift.JPADrift;
+import org.rhq.core.domain.drift.JPADriftChangeSet;
+import org.rhq.core.domain.drift.JPADriftFile;
+import org.rhq.core.domain.drift.JPADriftSet;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.core.server.EntitySerializer;
+import org.rhq.test.AssertUtils;
+import org.rhq.test.TransactionCallback;
+
+public class ManageSnapshotsTest extends DriftServerTest {
+
+ private DriftManagerLocal driftMgr;
+
+ private DriftTemplateManagerLocal templateMgr;
+
+ @BeforeClass(inheritGroups = true)
+ public void initClass() throws Exception {
+ driftMgr = getDriftManager();
+ templateMgr = getDriftTemplateManager();
+ }
+
+ public void pinningSnapshotShouldSetDriftDefAsPinned() {
+ final DriftDefinition driftDef =
createAndPersistDriftDef("test::setPinnedFlag");
+
+ // create initial change set
+ final JPADriftChangeSet changeSet = new JPADriftChangeSet(resource, 0, COVERAGE,
driftDef);
+
+ final JPADriftFile driftFile1 = new JPADriftFile("a1b2c3");
+ JPADrift drift = new JPADrift(changeSet, "drift.1", FILE_ADDED, null,
driftFile1);
+
+ final JPADriftSet driftSet = new JPADriftSet();
+ driftSet.addDrift(drift);
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+ em.persist(driftFile1);
+ em.persist(changeSet);
+ em.persist(driftSet);
+ changeSet.setInitialDriftSet(driftSet);
+ em.merge(changeSet);
+ }
+ });
+
+ driftMgr.pinSnapshot(getOverlord(), driftDef.getId(), 0);
+ DriftDefinition updatedDriftDef = driftMgr.getDriftDefinition(getOverlord(),
driftDef.getId());
+
+ assertNotNull("Failed to get " + toString(driftDef), updatedDriftDef);
+ assertTrue("Failed to set pinned flag of " + toString(driftDef),
updatedDriftDef.isPinned());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void pinningSnapshotShouldMakeSnapshotTheInitialChangeSet() throws Exception
{
+ final DriftDefinition driftDef =
createAndPersistDriftDef("test::makeSnapshotVersionZero");
+
+ // create initial change set
+ final JPADriftChangeSet changeSet0 = new JPADriftChangeSet(resource, 0, COVERAGE,
driftDef);
+
+ final JPADriftFile driftFile1 = new JPADriftFile("a1b2c3");
+ JPADrift drift1 = new JPADrift(changeSet0, "drift.1", FILE_ADDED, null,
driftFile1);
+
+ final JPADriftSet driftSet = new JPADriftSet();
+ driftSet.addDrift(drift1);
+
+ // create change set v1
+ final JPADriftFile driftFile2 = new JPADriftFile("1a2b3c");
+ final JPADriftChangeSet changeSet1 = new JPADriftChangeSet(resource, 1, DRIFT,
driftDef);
+ final JPADrift drift2 = new JPADrift(changeSet1, "drift.2", FILE_ADDED,
null, driftFile2);
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+ em.persist(driftFile1);
+ em.persist(driftFile2);
+ em.persist(changeSet0);
+ em.persist(driftSet);
+ changeSet0.setInitialDriftSet(driftSet);
+ em.merge(changeSet0);
+ em.persist(changeSet1);
+ em.persist(drift2);
+ }
+ });
+
+ driftMgr.pinSnapshot(getOverlord(), driftDef.getId(), 1);
+
+ // Verify that there is now only one change set for the drift def
+ GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
+ criteria.addFilterDriftDefinitionId(driftDef.getId());
+
+ PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
+ criteria);
+ assertEquals("All change sets except the change set representing the pinned
snapshot should be removed",
+ 1, changeSets.size());
+ DriftChangeSet<?> changeSet = changeSets.get(0);
+
+ assertEquals("The pinned snapshot version should be reset to zero", 0,
changeSet.getVersion());
+ assertEquals("The change set category is wrong", COVERAGE,
changeSet.getCategory());
+
+ JPADriftChangeSet expectedChangeSet = new JPADriftChangeSet(resource, 1,
COVERAGE, driftDef);
+ List<? extends Drift> expectedDrifts = asList(
+ new JPADrift(expectedChangeSet, drift1.getPath(), FILE_ADDED, null,
driftFile1),
+ new JPADrift(expectedChangeSet, drift2.getPath(), FILE_ADDED, null,
driftFile2));
+
+ List<? extends Drift> actualDrifts = new ArrayList(changeSet.getDrifts());
+
+ AssertUtils.assertCollectionMatchesNoOrder(
+ "Expected to find drifts from change sets 1 and 2 in the new initial
change set",
+ (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "newDriftFile");
+
+ // we need to compare the newDriftFile properties separately because
+ // assertCollectionMatchesNoOrder compares properties via equals() and
JPADriftFile
+ // does not implement equals.
+ assertPropertiesMatch(drift1.getNewDriftFile(), findDriftByPath(actualDrifts,
"drift.1").getNewDriftFile(),
+ "The newDriftFile property was not set correctly for " + drift1);
+ assertPropertiesMatch(drift2.getNewDriftFile(), findDriftByPath(actualDrifts,
"drift.2").getNewDriftFile(),
+ "The newDriftFile property was not set correctly for " + drift1);
+ }
+
+ public void pinningSnapshotShouldSendRequestToAgent() {
+ final DriftDefinition driftDef =
createAndPersistDriftDef("test::setPinnedFlag");
+
+ // create initial change set
+ final JPADriftChangeSet changeSet = new JPADriftChangeSet(resource, 0, COVERAGE,
driftDef);
+
+ final JPADriftFile driftFile1 = new JPADriftFile("a1b2c3");
+ JPADrift drift = new JPADrift(changeSet, "drift.1", FILE_ADDED, null,
driftFile1);
+
+ final JPADriftSet driftSet = new JPADriftSet();
+ driftSet.addDrift(drift);
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ EntityManager em = getEntityManager();
+ em.persist(driftFile1);
+ em.persist(changeSet);
+ em.persist(driftSet);
+ changeSet.setInitialDriftSet(driftSet);
+ em.merge(changeSet);
+ }
+ });
+
+ final AtomicBoolean agentInvoked = new AtomicBoolean(false);
+ agentServiceContainer.driftService = new TestDefService() {
+ @Override
+ public void pinSnapshot(int resourceId, String configName, DriftSnapshot
snapshot) {
+ try {
+ agentInvoked.set(true);
+ // serialize the method arguments here to more closely simulate what
+ // happens during the call. We cannot send hibernate-proxied objects
+ // to the agent. This is an attempt to catch that.
+ ObjectOutputStream stream = new ObjectOutputStream(new
ByteArrayOutputStream());
+ EntitySerializer.writeExternalRemote(resourceId, stream);
+ EntitySerializer.writeExternalRemote(configName, stream);
+ EntitySerializer.writeExternalRemote(snapshot, stream);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ };
+
+ driftMgr.pinSnapshot(getOverlord(), driftDef.getId(), 0);
+
+ assertTrue("Failed to send request to agent to pin snapshot",
agentInvoked.get());
+ }
+
+ private DriftDefinition createAndPersistDriftDef(String name) {
+ final DriftDefinition driftDef = new DriftDefinition(new Configuration());
+ driftDef.setName(name);
+ driftDef.setEnabled(true);
+ driftDef.setDriftHandlingMode(normal);
+ driftDef.setInterval(1800L);
+ driftDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
+
+ executeInTransaction(new TransactionCallback() {
+ @Override
+ public void execute() throws Exception {
+ driftDef.setResource(resource);
+ getEntityManager().persist(driftDef);
+ }
+ });
+
+ return driftDef;
+ }
+
+}
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/META-INF/ejb-jar.xml
b/modules/enterprise/server/integration-tests/src/test/resources/META-INF/ejb-jar.xml
new file mode 100644
index 0000000..8222948
--- /dev/null
+++ b/modules/enterprise/server/integration-tests/src/test/resources/META-INF/ejb-jar.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar
xmlns="http://java.sun.com/xml/ns/javaee"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+ version="3.0">
+
+ <description>RHQ</description>
+ <display-name>RHQ</display-name>
+
+ <assembly-descriptor>
+
+ <!-- all our EJB3 SLSBs can define custom @RequiredPermissions annotations for
authorization checks-->
+ <interceptor-binding>
+ <ejb-name>*</ejb-name>
+
<interceptor-class>org.rhq.enterprise.server.authz.RequiredPermissionsInterceptor</interceptor-class>
+ </interceptor-binding>
+ <interceptor-binding>
+ <ejb-name>*</ejb-name>
+
<interceptor-class>org.rhq.enterprise.server.common.TransactionInterruptInterceptor</interceptor-class>
+ </interceptor-binding>
+ <interceptor-binding>
+ <ejb-name>*</ejb-name>
+
<interceptor-class>org.rhq.enterprise.server.common.PerformanceMonitorInterceptor</interceptor-class>
+ </interceptor-binding>
+
+ </assembly-descriptor>
+
+</ejb-jar>
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/binary-blob-sample.jar
b/modules/enterprise/server/integration-tests/src/test/resources/binary-blob-sample.jar
new file mode 100644
index 0000000..0a629ec
Binary files /dev/null and
b/modules/enterprise/server/integration-tests/src/test/resources/binary-blob-sample.jar
differ
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/default.persistence.properties
b/modules/enterprise/server/integration-tests/src/test/resources/default.persistence.properties
new file mode 100644
index 0000000..8e4f317
--- /dev/null
+++
b/modules/enterprise/server/integration-tests/src/test/resources/default.persistence.properties
@@ -0,0 +1,22 @@
+hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup
+#hibernate.connection.release_mode=after_statement
+#hibernate.transaction.flush_before_completion=false
+#hibernate.transaction.auto_close_session=false
+#hibernate.query.factory_class=org.hibernate.hql.ast.ASTQueryTranslatorFactory
+#hibernate.hbm2ddl.auto=create-drop
+#hibernate.hbm2ddl.auto=create
+hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
+# Clustered cache with TreeCache
+#hibernate.cache.provider_class=org.jboss.ejb3.entity.TreeCacheProviderHook
+#hibernate.treecache.mbean.object_name=jboss.cache:service=EJB3EntityTreeCache
+#hibernate.dialect=org.hibernate.dialect.HSQLDialect
+hibernate.jndi.java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
+hibernate.jndi.java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
+hibernate.bytecode.use_reflection_optimizer=false
+# I don't think this is honored, but EJB3Deployer uses it
+hibernate.bytecode.provider=javassist
+hibernate.jdbc.use_streams_for_binary=true
+hibernate.show_sql=false
+hibernate.format_sql=true
+hibernate.default_batch_fetch_size=16
+hibernate.jdbc.batch_size=20
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/ejb3-interceptors-aop.xml
b/modules/enterprise/server/integration-tests/src/test/resources/ejb3-interceptors-aop.xml
new file mode 100644
index 0000000..f30aa70
--- /dev/null
+++
b/modules/enterprise/server/integration-tests/src/test/resources/ejb3-interceptors-aop.xml
@@ -0,0 +1,360 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE aop PUBLIC
+ "-//JBoss//DTD JBOSS AOP 1.0//EN"
+ "http://www.jboss.org/aop/dtd/jboss-aop_1_0.dtd">
+
+<aop>
+ <interceptor class="org.jboss.aspects.remoting.InvokeRemoteInterceptor"
scope="PER_VM"/>
+ <interceptor class="org.jboss.aspects.security.SecurityClientInterceptor"
scope="PER_VM"/>
+ <interceptor class="org.jboss.aspects.tx.ClientTxPropagationInterceptor"
scope="PER_VM"/>
+ <interceptor class="org.jboss.ejb3.remoting.IsLocalInterceptor"
scope="PER_VM"/>
+ <interceptor class="org.jboss.aspects.remoting.ClusterChooserInterceptor"
scope="PER_VM"/>
+
+ <interceptor class="org.jboss.aspects.tx.TxPropagationInterceptor"
scope="PER_VM"/>
+
+ <stack name="ServiceClientInterceptors">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
+ </stack>
+
+ <stack name="AsynchronousStatelessSessionClientInterceptors">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
+ </stack>
+
+ <stack name="AsynchronousStatefulSessionClientInterceptors">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
+ </stack>
+
+ <stack name="StatelessSessionClientInterceptors">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
+ </stack>
+
+ <stack name="StatefulSessionClientInterceptors">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
+ </stack>
+
+ <stack name="ClusteredStatelessSessionClientInterceptors">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.ClusterChooserInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
+ </stack>
+
+ <stack name="ClusteredStatefulSessionClientInterceptors">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.security.SecurityClientInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.ClusterChooserInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
+ </stack>
+
+ <interceptor class="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"
scope="PER_CLASS"/>
+ <interceptor class="org.jboss.ejb3.ENCPropagationInterceptor"
scope="PER_VM"/>
+ <interceptor name="Basic Authorization"
factory="org.jboss.ejb3.security.RoleBasedAuthorizationInterceptorFactory"
scope="PER_CLASS"/>
+ <interceptor name="JACC Authorization"
factory="org.jboss.ejb3.security.JaccAuthorizationInterceptorFactory"
scope="PER_CLASS"/>
+ <interceptor
factory="org.jboss.ejb3.security.AuthenticationInterceptorFactory"
scope="PER_CLASS"/>
+ <interceptor
factory="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"
scope="PER_CLASS"/>
+ <interceptor
class="org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor"
scope="PER_VM"/>
+ <interceptor
class="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"
scope="PER_VM"/>
+ <interceptor class="org.jboss.ejb3.stateful.StatefulInstanceInterceptor"
scope="PER_VM"/>
+ <interceptor
class="org.jboss.ejb3.stateful.SessionSynchronizationInterceptor"
scope="PER_VM"/>
+ <interceptor class="org.jboss.ejb3.service.ServiceSingletonInterceptor"
scope="PER_VM"/>
+ <interceptor class="org.jboss.ejb3.cache.StatefulReplicationInterceptor"
scope="PER_VM"/>
+ <interceptor factory="org.jboss.ejb3.stateful.StatefulRemoveFactory"
scope="PER_CLASS_JOINPOINT"/>
+ <interceptor factory="org.jboss.ejb3.tx.TxInterceptorFactory"
scope="PER_CLASS_JOINPOINT"/>
+ <interceptor factory="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"
scope="PER_CLASS_JOINPOINT"/>
+ <interceptor
factory="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"
scope="PER_CLASS"/>
+ <interceptor class="org.jboss.ejb3.AllowedOperationsInterceptor"
scope="PER_VM"/>
+ <interceptor
factory="org.jboss.ejb3.mdb.CurrentMessageInjectorInterceptorFactory"
scope="PER_CLASS"/>
+ <interceptor
class="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"
scope="PER_VM"/>
+
+ <domain name="Stateless Bean">
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
+ <interceptor-ref name="Basic Authorization"/>
+ </bind>
+ <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
+ <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ </bind>
+ <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
+ @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.ThreadlocalPool.class,
maxSize=30, timeout=10000)
+ </annotation>
+ </domain>
+
+ <domain name="JACC Stateless Bean">
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
+ <interceptor-ref name="JACC Authorization"/>
+ </bind>
+ <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
+ <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ </bind>
+ <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
+ @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.ThreadlocalPool.class,
maxSize=30, timeout=10000)
+ </annotation>
+ </domain>
+
+ <domain name="Base Stateful Bean">
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
+ <interceptor-ref name="Basic Authorization"/>
+ </bind>
+ <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->@javax.ejb.Remove(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateful.StatefulRemoveFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateful.StatefulInstanceInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
+ <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
+ </bind>
+ <bind pointcut="execution(public *
$instanceof{javax.ejb.SessionSynchronization}->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateful.SessionSynchronizationInterceptor"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ </bind>
+
+ <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..)) AND !execution(public *
*->@javax.ejb.Remove(..))">
+ <interceptor-ref
name="org.jboss.ejb3.cache.StatefulReplicationInterceptor"/>
+ </bind>
+ <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
+ @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.ThreadlocalPool.class,
maxSize=30, timeout=10000)
+ </annotation>
+ </domain>
+
+ <domain name="Stateful Bean" extends="Base Stateful Bean"
inheritBindings="true">
+ <!-- NON Clustered cache configuration -->
+ <annotation expr="!class((a)org.jboss.annotation.ejb.cache.Cache) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.Cache
(org.jboss.ejb3.cache.simple.SimpleStatefulCache.class)
+ </annotation>
+ <annotation
expr="!class((a)org.jboss.annotation.ejb.cache.simple.PersistenceManager) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.simple.PersistenceManager
(org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager.class)
+ </annotation>
+ <annotation
expr="!class((a)org.jboss.annotation.ejb.cache.simple.CacheConfig) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.simple.CacheConfig (maxSize=100000,
idleTimeoutSeconds=300)
+ </annotation>
+
+ <!-- Clustered cache configuration -->
+ <annotation expr="!class((a)org.jboss.annotation.ejb.cache.Cache) AND
class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.Cache
(org.jboss.ejb3.cache.tree.StatefulTreeCache.class)
+ </annotation>
+ <annotation expr="!class((a)org.jboss.annotation.ejb.cache.tree.CacheConfig)
AND class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.tree.CacheConfig
(name="jboss.cache:service=EJB3SFSBClusteredCache", maxSize=100000,
idleTimeoutSeconds=300)
+ </annotation>
+ </domain>
+
+ <domain name="JACC Stateful Bean">
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
+ <interceptor-ref name="JACC Authorization"/>
+ </bind>
+ <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->@javax.ejb.Remove(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateful.StatefulRemoveFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateful.StatefulInstanceInterceptor"/>
+ <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
+ <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
+ </bind>
+ <bind pointcut="execution(public *
$instanceof{javax.ejb.SessionSynchronization}->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateful.SessionSynchronizationInterceptor"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ </bind>
+
+ <bind pointcut="execution(public *
@org.jboss.annotation.ejb.Clustered->*(..)) AND !execution(public *
*->@javax.ejb.Remove(..))">
+ <interceptor-ref
name="org.jboss.ejb3.cache.StatefulReplicationInterceptor"/>
+ </bind>
+ <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
+ @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.ThreadlocalPool.class,
maxSize=30, timeout=10000)
+ </annotation>
+
+ <!-- NON Clustered cache configuration -->
+ <annotation expr="!class((a)org.jboss.annotation.ejb.cache.Cache) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.Cache
(org.jboss.ejb3.cache.simple.SimpleStatefulCache.class)
+ </annotation>
+ <annotation
expr="!class((a)org.jboss.annotation.ejb.cache.simple.PersistenceManager) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.simple.PersistenceManager
(org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager.class)
+ </annotation>
+ <annotation
expr="!class((a)org.jboss.annotation.ejb.cache.simple.CacheConfig) AND
!class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.simple.CacheConfig (maxSize=100000,
idleTimeoutSeconds=300)
+ </annotation>
+
+ <!-- Clustered cache configuration -->
+ <annotation expr="!class((a)org.jboss.annotation.ejb.cache.Cache) AND
class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.Cache
(org.jboss.ejb3.cache.tree.StatefulTreeCache.class)
+ </annotation>
+ <annotation expr="!class((a)org.jboss.annotation.ejb.cache.tree.CacheConfig)
AND class((a)org.jboss.annotation.ejb.Clustered)">
+ @org.jboss.annotation.ejb.cache.tree.CacheConfig
(name="jboss.cache:service=EJB3SFSBClusteredCache", maxSize=100000,
idleTimeoutSeconds=300)
+ </annotation>
+ </domain>
+
+ <domain name="Embedded Stateful Bean" extends="Base Stateful
Bean" inheritBindings="true">
+ <!-- NON Clustered cache configuration -->
+ <annotation expr="!class((a)org.jboss.annotation.ejb.cache.Cache)">
+ @org.jboss.annotation.ejb.cache.Cache
(org.jboss.ejb3.cache.NoPassivationCache.class)
+ </annotation>
+
+ </domain>
+
+ <domain name="Message Driven Bean">
+ <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
+ <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ </bind>
+ <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
+ @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.StrictMaxPool.class,
maxSize=30, timeout=10000)
+ </annotation>
+ </domain>
+
+ <domain name="Consumer Bean">
+ <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
+ <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..)) AND (has(*
*->@org.jboss.annotation.ejb.CurrentMessage(..)) OR hasfield(*
*->(a)org.jboss.annotation.ejb.CurrentMessage))">
+ <interceptor-ref
name="org.jboss.ejb3.mdb.CurrentMessageInjectorInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ </bind>
+ <annotation expr="!class((a)org.jboss.annotation.ejb.PoolClass)">
+ @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.StrictMaxPool.class,
maxSize=30, timeout=10000)
+ </annotation>
+ </domain>
+
+ <domain name="Service Bean">
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
+ </bind>
+ <bind pointcut="!execution(* *->create()) AND !execution(*
*->start()) AND !execution(*->new(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
+ <interceptor-ref name="Basic Authorization"/>
+ </bind>
+ <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
+ <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..)) AND !execution(*
*->create()) AND !execution(* *->start())">
+ <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ </bind>
+ </domain>
+
+ <domain name="JACC Service Bean">
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.ENCPropagationInterceptor"/>
+ </bind>
+ <bind pointcut="!execution(* *->create()) AND !execution(*
*->start()) AND !execution(*->new(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public *
@org.jboss.annotation.security.SecurityDomain->*(..))">
+ <interceptor-ref name="Basic Authorization"/>
+ </bind>
+ <bind pointcut="execution(public *
@javax.annotation.security.RunAs->*(..))">
+ <interceptor-ref
name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..))">
+ <interceptor-ref
name="org.jboss.aspects.tx.TxPropagationInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
+ <interceptor-ref
name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
+ <interceptor-ref
name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
+ </bind>
+ <bind pointcut="execution(public * *->*(..)) AND !execution(*
*->create()) AND !execution(* *->start())">
+ <interceptor-ref
name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ </bind>
+ </domain>
+
+
+</aop>
\ No newline at end of file
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/embedded-jboss-beans.xml
b/modules/enterprise/server/integration-tests/src/test/resources/embedded-jboss-beans.xml
new file mode 100644
index 0000000..05edefa
--- /dev/null
+++
b/modules/enterprise/server/integration-tests/src/test/resources/embedded-jboss-beans.xml
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer:2.0
bean-deployer_2_0.xsd"
+ xmlns="urn:jboss:bean-deployer:2.0">
+
+ <bean name="Naming"
class="org.jnp.server.SingletonNamingServer"/>
+
+ <bean name="InitialContextProperties"
class="java.util.Hashtable">
+ <constructor>
+ <parameter class="java.util.Map">
+ <map keyClass="java.lang.String"
valueClass="java.lang.String">
+ <entry>
+ <key>java.naming.factory.initial</key>
+ <value>org.jnp.interfaces.LocalOnlyContextFactory</value>
+ </entry>
+ <entry>
+ <key>java.naming.factory.url.pkgs</key>
+ <value>org.jboss.naming:org.jnp.interfaces</value>
+ </entry>
+ </map>
+ </parameter>
+ </constructor>
+ </bean>
+
+ <bean name="java:comp/Initializer"
class="org.jboss.ejb3.embedded.JavaCompInitializer">
+ <property name="jndiProperties">
+ <inject bean="InitialContextProperties"/>
+ </property>
+ </bean>
+
+ <bean name="XidFactory"
class="org.jboss.tm.XidFactoryImpl"/>
+
+ <bean name="XidFactoryMBean"
class="org.jboss.ejb3.embedded.XidFactoryMBean">
+ <constructor>
+ <parameter class="org.jboss.tm.XidFactoryBase">
+ <inject bean="XidFactory"/>
+ </parameter>
+ </constructor>
+ </bean>
+
+ <bean name="TransactionManagerInitializer"
class="org.jboss.tm.TransactionManagerInitializer">
+ <property name="xidFactory">
+ <inject bean="XidFactory"/>
+ </property>
+ <property name="initialContextProperties">
+ <inject bean="InitialContextProperties"/>
+ </property>
+ </bean>
+
+ <bean name="UserTransaction"
class="org.jboss.ejb3.embedded.UserTransactionImpl">
+ <demand>TransactionManagerInitializer</demand>
+ </bean>
+
+ <bean name="UserTransactionBinding"
class="org.jboss.ejb3.embedded.JndiBinder">
+ <property name="jndiProperties">
+ <inject bean="InitialContextProperties"/>
+ </property>
+ <property name="target">
+ <inject bean="UserTransaction"/>
+ </property>
+ <property name="bindTo">UserTransaction</property>
+ <property name="serializable">false</property>
+ </bean>
+
+
+ <bean name="TransactionManager" class="java.lang.Object">
+ <constructor factoryMethod="getTransactionManager">
+ <factory bean="TransactionManagerInitializer"/>
+ </constructor>
+ </bean>
+ <bean name="CachedConnectionManager"
class="org.jboss.resource.connectionmanager.CachedConnectionManagerReference">
+ <property name="transactionManager">
+ <inject bean="TransactionManager"/>
+ </property>
+ </bean>
+
+ <bean name="RHQDSBootstrap"
class="org.jboss.resource.adapter.jdbc.local.LocalTxDataSource">
+ <property
name="driverClass">${rhq.test.ds.driver-class}</property>
+ <property
name="connectionURL">${rhq.test.ds.connection-url}</property>
+ <property
name="userName">${rhq.test.ds.user-name}</property>
+ <property name="password">${rhq.test.ds.password}</property>
+ <property name="jndiName">java:/RHQDS</property>
+ <property name="minSize">0</property>
+ <property name="maxSize">20</property>
+ <property name="blockingTimeout">3000</property>
+ <property name="idleTimeout">100000</property>
+ <property name="transactionManager">
+ <inject bean="TransactionManager"/>
+ </property>
+ <property name="cachedConnectionManager">
+ <inject bean="CachedConnectionManager"/>
+ </property>
+ <property name="initialContextProperties">
+ <inject bean="InitialContextProperties"/>
+ </property>
+ </bean>
+
+ <bean name="RHQDS" class="java.lang.Object">
+ <constructor factoryMethod="getDatasource">
+ <factory bean="RHQDSBootstrap"/>
+ </constructor>
+ </bean>
+
+ <!-- needed for Quartz' no-TX data source (even though this is a local-tx,
seems like Quartz is still working) -->
+ <bean name="NoTxRHQDSBootstrap"
class="org.jboss.resource.adapter.jdbc.local.LocalTxDataSource">
+ <property
name="driverClass">${rhq.test.ds.driver-class}</property>
+ <property
name="connectionURL">${rhq.test.ds.connection-url}</property>
+ <property
name="userName">${rhq.test.ds.user-name}</property>
+ <property name="password">${rhq.test.ds.password}</property>
+ <property name="jndiName">java:/NoTxRHQDS</property>
+ <property name="minSize">0</property>
+ <property name="maxSize">10</property>
+ <property name="blockingTimeout">1000</property>
+ <property name="idleTimeout">100000</property>
+ <property name="transactionManager">
+ <inject bean="TransactionManager"/>
+ </property>
+ <property name="cachedConnectionManager">
+ <inject bean="CachedConnectionManager"/>
+ </property>
+ <property name="initialContextProperties">
+ <inject bean="InitialContextProperties"/>
+ </property>
+ </bean>
+
+ <bean name="NoTxRHQDS" class="java.lang.Object">
+ <constructor factoryMethod="getDatasource">
+ <factory bean="NoTxRHQDSBootstrap"/>
+ </constructor>
+ </bean>
+
+ <bean name="DefaultDSBootstrap"
class="org.jboss.resource.adapter.jdbc.local.LocalTxDataSource">
+ <property
name="driverClass">org.hsqldb.jdbcDriver</property>
+ <property name="connectionURL">jdbc:hsqldb:.</property>
+ <!-- <property
name="connectionURL">jdbc:hsqldb:./hypersonic/localDB</property>
-->
+ <property name="userName">sa</property>
+ <property name="jndiName">java:/DefaultDS</property>
+ <property name="minSize">0</property>
+ <property name="maxSize">10</property>
+ <property name="blockingTimeout">1000</property>
+ <property name="idleTimeout">100000</property>
+ <property name="transactionManager">
+ <inject bean="TransactionManager"/>
+ </property>
+ <property name="cachedConnectionManager">
+ <inject bean="CachedConnectionManager"/>
+ </property>
+ <property name="initialContextProperties">
+ <inject bean="InitialContextProperties"/>
+ </property>
+ </bean>
+
+ <bean name="DefaultDS" class="java.lang.Object">
+ <constructor factoryMethod="getDatasource">
+ <factory bean="DefaultDSBootstrap"/>
+ </constructor>
+ </bean>
+
+</deployment>
\ No newline at end of file
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/jboss-jms-beans.xml
b/modules/enterprise/server/integration-tests/src/test/resources/jboss-jms-beans.xml
new file mode 100644
index 0000000..287cffc
--- /dev/null
+++ b/modules/enterprise/server/integration-tests/src/test/resources/jboss-jms-beans.xml
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer:2.0
bean-deployer_2_0.xsd"
+ xmlns="urn:jboss:bean-deployer:2.0">
+ <bean name="jboss.mq:service=JMSProviderLoader,name=JMSProvider"
class="org.jboss.jms.jndi.JNDIProviderAdapter">
+ <property name="factoryRef">java:/JmsXA</property>
+ <property name="queueFactoryRef">java:/JmsXA</property>
+ <property name="topicFactoryRef">java:/JmsXA</property>
+ <property name="properties"
class="java.util.Properties">
+ <map keyClass="java.lang.String"
valueClass="java.lang.String">
+ <entry>
+ <key>java.naming.factory.initial</key>
+
<value>org.jnp.interfaces.LocalOnlyContextFactory</value>
+ </entry>
+ <entry>
+ <key>java.naming.factory.url.pkgs</key>
+ <value>org.jboss.naming:org.jnp.interfaces</value>
+ </entry>
+ </map>
+ </property>
+ </bean>
+
+ <bean name="b1" class="org.jboss.ejb3.embedded.JndiBinder">
+ <property name="jndiProperties"><inject
bean="InitialContextProperties"/></property>
+ <property name="target"><inject
bean="jboss.mq:service=JMSProviderLoader,name=JMSProvider"/></property>
+ <property name="bindTo">java:/DefaultJMSProvider</property>
+ <property name="serializable">true</property>
+ </bean>
+
+ <bean name="jboss.mq:service=ServerSessionPoolMBean,name=StdJMSPool"
class="org.jboss.jms.asf.StdServerSessionPoolFactory">
+ <property name="name">StdJMSPool</property>
+ <property name="xidFactory"><inject
bean="XidFactoryMBean"/></property>
+ <property name="transactionManager"><inject
bean="TransactionManager"/></property>
+ </bean>
+
+ <bean name="b2" class="org.jboss.ejb3.embedded.JndiBinder">
+ <property name="jndiProperties"><inject
bean="InitialContextProperties"/></property>
+ <property name="target"><inject
bean="jboss.mq:service=ServerSessionPoolMBean,name=StdJMSPool"/></property>
+ <property name="bindTo">java:/StdJMSPool</property>
+ <property name="serializable">false</property>
+ </bean>
+
+
+ <bean name="jboss.mq:service=PersistenceManager"
class="org.jboss.mq.pm.none.PersistenceManager">
+ </bean>
+
+ <bean name="jboss.mq:service=MessageCache"
class="org.jboss.mq.kernel.MessageCache">
+ <property name="persistenceManager"><inject
bean="jboss.mq:service=PersistenceManager"/></property>
+ <property name="highMemoryMark">50</property>
+ <property name="maxMemoryMark">60</property>
+ </bean>
+
+ <bean name="jms-rar-WorkManager"
class="org.jboss.ejb3.embedded.resource.JBossWorkManager">
+ </bean>
+
+ <bean name="jms-rar-DeploymentInfo"
class="org.jboss.ejb3.embedded.resource.Ejb3DeploymentInfo">
+ <constructor>
+ <parameter
class="java.lang.String">jms-ra.rar</parameter>
+ <parameter
class="java.lang.String">javax.jms.MessageListener</parameter>
+ <parameter
class="java.lang.String">org.jboss.resource.adapter.jms.inflow.JmsActivationSpec</parameter>
+ </constructor>
+ </bean>
+
+ <bean name="jboss.jca:name='jms-ra.rar',service=RARDeployment"
class="org.jboss.ejb3.embedded.resource.RARDeployment">
+ <constructor>
+ <parameter class="org.jboss.deployment.DeploymentInfo">
+ <inject bean="jms-rar-DeploymentInfo"/>
+ </parameter>
+ </constructor>
+ <property name="workManager"><inject
bean="jms-rar-WorkManager"/></property>
+ </bean>
+
+ <bean name="jboss.mq:service=StateManager"
class="org.jboss.mq.sm.none.NullStateManager">
+ </bean>
+
+ <bean name="BasicQueueParameters"
class="org.jboss.mq.server.BasicQueueParameters"/>
+
+ <bean name="jboss.mq:service=ThreadPool"
class="org.jboss.util.threadpool.BasicThreadPool">
+ <property name="name">JMSThread</property>
+ <property name="threadGroupName">JBossMQ Server
Threads</property>
+ <!-- The max number of threads in the pool -->
+ <property name="maximumPoolSize">10</property>
+ <!-- The max number of tasks before the queue is full -->
+ <property name="maximumQueueSize">1000</property>
+ <!-- The behavior of the pool when a task is added and the queue is full.
+ abort - a RuntimeException is thrown
+ run - the calling thread executes the task
+ wait - the calling thread blocks until the queue has room
+ discard - the task is silently discarded without being run
+ discardOldest - check to see if a task is about to complete and enque
+ the new task if possible, else run the task in the calling thread
+ -->
+ <property name="blockingMode">run</property>
+ </bean>
+
+ <bean name="jboss.mq:service=DestinationManager"
class="org.jboss.mq.server.JMSDestinationManager">
+ <constructor>
+ <parameter class="org.jboss.mq.server.BasicQueueParameters">
+ <inject bean="BasicQueueParameters"/>
+ </parameter>
+ </constructor>
+ <property name="persistenceManager"><inject
bean="jboss.mq:service=PersistenceManager"/></property>
+ <property name="messageCache"><inject
bean="jboss.mq:service=MessageCache"/></property>
+ <property name="stateManager"><inject
bean="jboss.mq:service=StateManager"/></property>
+ <property name="threadPool"><inject
bean="jboss.mq:service=ThreadPool"/></property>
+ <property name="threadGroup"><inject
bean="jboss.mq:service=ThreadPool"
property="threadGroup"/></property>
+ <start method="startServer"/>
+ <stop method="stopServer"/>
+ </bean>
+
+ <bean name="jboss.mq.destination:service=Queue,name=DLQ"
class="org.jboss.mq.kernel.Queue">
+ <property name="destinationManagerPojo"><inject
bean="jboss.mq:service=DestinationManager"/></property>
+ <property name="initialContextProperties"><inject
bean="InitialContextProperties"/></property>
+ <property name="destinationName">DLQ</property>
+ </bean>
+
+ <bean name="jboss.mq:service=Invoker"
class="org.jboss.mq.server.JMSServerInvoker">
+ <property name="next"><inject
bean="jboss.mq:service=DestinationManager"/></property>
+ </bean>
+
+ <bean name="jboss.mq:service=invocationlayer,type=JVM"
class="org.jboss.mq.kernel.JVMIL">
+ <property name="jmsInvoker"><inject
bean="jboss.mq:service=Invoker"/></property>
+ <!-- notice we actually switched - the non-xa connection factory JNDI Ref is the
JNDI name our EJBs use -->
+ <!-- the embedded EJB container doesn't support XA, so the connection factory
our JmsXA JNDI lookup will return will be a non-XA factory -->
+ <property
name="connectionFactoryJNDIRef">java:/JmsXA</property>
+ <property
name="XAConnectionFactoryJNDIRef">java:/ConnectionFactory</property>
+ <property name="pingPeriod">0</property>
+ <property name="initialContextProperties"><inject
bean="InitialContextProperties"/></property>
+ </bean>
+
+</deployment>
diff --git a/modules/enterprise/server/integration-tests/src/test/resources/jms-ra.rar
b/modules/enterprise/server/integration-tests/src/test/resources/jms-ra.rar
new file mode 100644
index 0000000..c4807c6
Binary files /dev/null and
b/modules/enterprise/server/integration-tests/src/test/resources/jms-ra.rar differ
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/jndi.properties
b/modules/enterprise/server/integration-tests/src/test/resources/jndi.properties
new file mode 100644
index 0000000..9225cef
--- /dev/null
+++ b/modules/enterprise/server/integration-tests/src/test/resources/jndi.properties
@@ -0,0 +1,2 @@
+java.naming.factory.initial=org.jnp.interfaces.LocalOnlyContextFactory
+java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
\ No newline at end of file
diff --git a/modules/enterprise/server/integration-tests/src/test/resources/log4j.xml
b/modules/enterprise/server/integration-tests/src/test/resources/log4j.xml
new file mode 100644
index 0000000..bc65329
--- /dev/null
+++ b/modules/enterprise/server/integration-tests/src/test/resources/log4j.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- ===================================================================== -->
+<!-- -->
+<!-- Log4j Configuration -->
+<!-- -->
+<!-- ===================================================================== -->
+
+<!-- $Id: log4j.xml 39945 2006-01-12 02:44:07Z bill $ -->
+
+<!--
+ | For more configuration infromation and examples see the Jakarta Log4j
+ | owebsite:
http://jakarta.apache.org/log4j
+ -->
+
+<log4j:configuration
xmlns:log4j="http://jakarta.apache.org/log4j/"
debug="true">
+
+ <appender name="CONSOLE"
class="org.apache.log4j.ConsoleAppender">
+ <errorHandler
class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
+ <param name="Target" value="System.out"/>
+ <param name="Threshold" value="WARN"/>
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Messagen -->
+ <!--
+ <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p
[%c{1}] %m%n"/>
+ -->
+ <param name="ConversionPattern" value="%-5p %d{dd-MM
HH:mm:ss,SSS} [%c] (%F:%M:%L) -%m%n"/>
+ </layout>
+ </appender>
+
+ <appender name="FILE"
class="org.apache.log4j.RollingFileAppender">
+ <param name="File" value="target/server-jar-test.log"/>
+ <param name="Threshold" value="WARN"/>
+ <param name="Append" value="false"/>
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Messagen -->
+ <!--
+ <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p
[%c{1}] %m%n"/>
+ -->
+ <param name="ConversionPattern" value="%-5p %d{dd-MM
HH:mm:ss,SSS} [%c] (%F:%M:%L) -%m%n"/>
+ </layout>
+ </appender>
+
+ <!-- Hibernate logs WARNINGS frequent from this class, in test envs. -->
+ <category name="org.hibernate.hql.ast.QueryTranslatorImpl">
+ <priority value="ERROR"/>
+ </category>
+
+ <!-- hides the TIMER SERVICE IS NOT INSTALLED warning - we know embedded EJB3
container doesn't support timers -->
+ <category
name="org.jboss.ejb3.timerservice.jboss.JBossTimerServiceFactory">
+ <priority value="ERROR"/>
+ </category>
+
+ <!-- hides the shutdown warnings - for some reason, the container spits out some
warnings when shutting down -->
+ <category
name="org.jboss.kernel.plugins.dependency.StartStopLifecycleAction">
+ <priority value="ERROR"/>
+ </category>
+
+ <!-- Hibernate SQL logs -->
+ <!--
+ <category name="org.hibernate.SQL">
+ <priority value="DEBUG"/>
+ </category>
+ -->
+
+ <root>
+ <appender-ref ref="CONSOLE"/>
+ <appender-ref ref="FILE"/>
+ </root>
+
+</log4j:configuration>
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/login-config.xml
b/modules/enterprise/server/integration-tests/src/test/resources/login-config.xml
new file mode 100644
index 0000000..645294d
--- /dev/null
+++ b/modules/enterprise/server/integration-tests/src/test/resources/login-config.xml
@@ -0,0 +1,72 @@
+<?xml version='1.0'?>
+
+<!DOCTYPE policy PUBLIC
+ "-//JBoss//DTD JBOSS Security Config 3.0//EN"
+ "http://www.jboss.org/j2ee/dtd/security_config.dtd">
+
+<!-- The XML based JAAS login configuration read by the
+org.jboss.security.auth.login.XMLLoginConfig mbean. Add
+an application-policy element for each security domain.
+
+The outline of the application-policy is:
+<application-policy name="security-domain-name">
+ <authentication>
+ <login-module code="login.module1.class.name"
flag="control_flag">
+ <module-option name =
"option1-name">option1-value</module-option>
+ <module-option name =
"option2-name">option2-value</module-option>
+ ...
+ </login-module>
+
+ <login-module code="login.module2.class.name"
flag="control_flag">
+ ...
+ </login-module>
+ ...
+ </authentication>
+</application-policy>
+
+$Revision: 42748 $
+-->
+
+<policy>
+ <!-- Used by clients within the application server VM such as
+ mbeans and servlets that access EJBs.
+ -->
+ <application-policy name="client-login">
+ <authentication>
+ <login-module code="org.jboss.security.ClientLoginModule"
+ flag="required">
+ <!-- Any existing security context will be restored on logout -->
+ <module-option
name="restore-login-identity">true</module-option>
+ </login-module>
+ </authentication>
+ </application-policy>
+
+ <application-policy name = "jbossmq">
+ <authentication>
+ <login-module code = "org.jboss.mq.sm.file.DynamicLoginModule"
flag = "required">
+ <module-option name =
"unauthenticatedIdentity">guest</module-option>
+ <module-option name =
"sm.objectname">jboss.mq:service=StateManager</module-option>
+ </login-module>
+ </authentication>
+ </application-policy>
+
+ <application-policy name="other">
+ <!-- A simple server login module, which can be used when the number
+ of users is relatively small. It uses two properties files:
+ users.properties, which holds users (key) and their password (value).
+ roles.properties, which holds users (key) and a comma-separated list of
+ their roles (value).
+ The unauthenticatedIdentity property defines the name of the principal
+ that will be used when a null username and password are presented as is
+ the case for an unuathenticated web client or MDB. If you want to
+ allow such users to be authenticated add the property, e.g.,
+ unauthenticatedIdentity="nobody"
+ -->
+ <authentication>
+ <login-module
code="org.jboss.security.auth.spi.UsersRolesLoginModule"
+ flag="required"/>
+ </authentication>
+ </application-policy>
+
+</policy>
+
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/rhq-mdb-beans.xml
b/modules/enterprise/server/integration-tests/src/test/resources/rhq-mdb-beans.xml
new file mode 100644
index 0000000..ad05b5e
--- /dev/null
+++ b/modules/enterprise/server/integration-tests/src/test/resources/rhq-mdb-beans.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer:2.0
bean-deployer_2_0.xsd"
+ xmlns="urn:jboss:bean-deployer:2.0">
+
+ <bean name="jboss.mq.destination:service=Queue,name=AlertConditionQueue"
class="org.jboss.mq.kernel.Queue">
+ <property name="destinationManagerPojo"><inject
bean="jboss.mq:service=DestinationManager"/></property>
+ <property name="initialContextProperties"><inject
bean="InitialContextProperties"/></property>
+ <property
name="destinationName">AlertConditionQueue</property>
+ </bean>
+
+ <bean name="jboss.mq.destination:service=Queue,name=DriftChangesetQueue"
class="org.jboss.mq.kernel.Queue">
+ <property name="destinationManagerPojo"><inject
bean="jboss.mq:service=DestinationManager"/></property>
+ <property name="initialContextProperties"><inject
bean="InitialContextProperties"/></property>
+ <property
name="destinationName">DriftChangesetQueue</property>
+ </bean>
+
+ <bean name="jboss.mq.destination:service=Queue,name=DriftFileQueue"
class="org.jboss.mq.kernel.Queue">
+ <property name="destinationManagerPojo"><inject
bean="jboss.mq:service=DestinationManager"/></property>
+ <property name="initialContextProperties"><inject
bean="InitialContextProperties"/></property>
+ <property name="destinationName">DriftFileQueue</property>
+ </bean>
+
+</deployment>
\ No newline at end of file
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/security-beans.xml
b/modules/enterprise/server/integration-tests/src/test/resources/security-beans.xml
new file mode 100644
index 0000000..84fa819
--- /dev/null
+++ b/modules/enterprise/server/integration-tests/src/test/resources/security-beans.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+ xmlns="urn:jboss:bean-deployer">
+
+ <bean class="org.jboss.ejb3.embedded.JaasSecurityManagerService"
+ name="jboss.security:service=JaasSecurityManager">
+ <property name="initialContextProperties">
+ <inject bean="InitialContextProperties"/>
+ </property>
+ </bean>
+</deployment>
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/test-assist-color-number.txt
b/modules/enterprise/server/integration-tests/src/test/resources/test-assist-color-number.txt
new file mode 100644
index 0000000..6ad90cc
--- /dev/null
+++
b/modules/enterprise/server/integration-tests/src/test/resources/test-assist-color-number.txt
@@ -0,0 +1,46 @@
+
+color[ number
+c
+color[
+n
+number
+r
+color[ number
+lo
+color[
+number
+number!= number!== number= number==
+be
+number
+number==
+number=="two" number=="four" number=="twenty-two"
number=="twenty-four" number=="forty-two"
+number==t
+number=="two" number=="twenty-two" number=="twenty-four"
number=="forty-two"
+number==fo
+number=="four" number=="twenty-four" number=="forty-two"
+color
+color[
+color[
+color[primary] color[other]
+color[p
+color[primary]
+color[o
+color[other]
+color[r
+color[primary] color[other]
+color[primary
+color[primary]
+color[primary]
+color[primary]!= color[primary]!== color[primary]= color[primary]==
+color[primary]=
+color[primary]="red" color[primary]="green"
color[primary]="blue"
+color[primary]=e
+color[primary]="red" color[primary]="green"
color[primary]="blue"
+color[primary]=d
+color[primary]="red"
+color[primary]=g
+color[primary]="green"
+color[primary]=b
+color[primary]="blue"
+color[primary]=r
+color[primary]="red" color[primary]="green"
\ No newline at end of file
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/test-ldap.properties
b/modules/enterprise/server/integration-tests/src/test/resources/test-ldap.properties
new file mode 100644
index 0000000..3316083
--- /dev/null
+++ b/modules/enterprise/server/integration-tests/src/test/resources/test-ldap.properties
@@ -0,0 +1,2 @@
+rhq.test.ldap.url=${rhq.test.ldap.url}
+rhq.test.ldap.LDAPFactory=${rhq.test.ldap.LDAPFactory}
\ No newline at end of file
diff --git
a/modules/enterprise/server/integration-tests/src/test/resources/test-scheduler.properties
b/modules/enterprise/server/integration-tests/src/test/resources/test-scheduler.properties
new file mode 100644
index 0000000..804639a
--- /dev/null
+++
b/modules/enterprise/server/integration-tests/src/test/resources/test-scheduler.properties
@@ -0,0 +1,29 @@
+# QUARTZ CONFIGURATION FOR OUR UNIT TESTS
+# our test timeout will be fast, 5 seconds
+rhq.server.operation-timeout = 5
+
+# scheduler factory config
+org.quartz.scheduler.instanceName = RHQScheduler
+org.quartz.scheduler.instanceId = AUTO
+
+# thread pool config
+org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
+org.quartz.threadPool.threadCount = 25
+org.quartz.threadPool.threadPriority = 5
+
+# database config - note the use of POSTGRES for tests
+org.quartz.jobStore.class =
org.quartz.impl.jdbcjobstore.JobStoreCMT
+org.quartz.jobStore.driverDelegateClass =
org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
+# tests don't need this
+org.quartz.jobStore.isClustered = false
+org.quartz.jobStore.clusterCheckinInterval = 600000
+# make this a small non-zero time (in ms) so the scheduler (almost) never sleeps for more
predictable test timing
+org.quartz.scheduler.idleWaitTime = 10
+org.quartz.jobStore.tablePrefix = RHQ_QRTZ_
+org.quartz.jobStore.useProperties = true
+org.quartz.jobStore.dataSource = RHQDS
+org.quartz.dataSource.RHQDS.jndiURL = java:/RHQDS
+org.quartz.dataSource.RHQDS.maxConnections = 10
+org.quartz.jobStore.nonManagedTXDataSource = NoTxRHQDS
+org.quartz.dataSource.NoTxRHQDS.jndiURL = java:/NoTxRHQDS
+org.quartz.dataSource.NoTxRHQDS.maxConnections = 10
\ No newline at end of file
diff --git a/modules/enterprise/server/integration-tests/src/test/resources/testng.xml
b/modules/enterprise/server/integration-tests/src/test/resources/testng.xml
new file mode 100644
index 0000000..1452edb
--- /dev/null
+++ b/modules/enterprise/server/integration-tests/src/test/resources/testng.xml
@@ -0,0 +1,12 @@
+<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
+
+<suite name="EJB3 Testsuite" >
+ <test name="EJB3 tests" >
+ <groups>
+ <run>
+ <include name="integration.ejb3"/>
+ </run>
+ </groups>
+
+ </test>
+</suite>
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginService.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginService.java
deleted file mode 100644
index 64c6537..0000000
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginService.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2011 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.drift;
-
-import java.io.File;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.rhq.core.domain.configuration.Configuration;
-import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
-import org.rhq.core.domain.plugin.PluginKey;
-import org.rhq.core.domain.plugin.PluginStatusType;
-import org.rhq.core.domain.plugin.ServerPlugin;
-import org.rhq.core.util.MessageDigestGenerator;
-import org.rhq.enterprise.server.plugin.pc.AbstractTypeServerPluginContainer;
-import org.rhq.enterprise.server.plugin.pc.MasterServerPluginContainer;
-import org.rhq.enterprise.server.plugin.pc.MasterServerPluginContainerConfiguration;
-import org.rhq.enterprise.server.plugin.pc.ServerPluginEnvironment;
-import org.rhq.enterprise.server.plugin.pc.ServerPluginManager;
-import org.rhq.enterprise.server.plugin.pc.ServerPluginService;
-import org.rhq.enterprise.server.plugin.pc.ServerPluginType;
-import org.rhq.enterprise.server.plugin.pc.drift.DriftServerPluginContainer;
-import org.rhq.enterprise.server.plugin.pc.drift.DriftServerPluginManager;
-import org.rhq.enterprise.server.xmlschema.ServerPluginDescriptorMetadataParser;
-import
org.rhq.enterprise.server.xmlschema.generated.serverplugin.ServerPluginDescriptorType;
-
-public class DriftServerPluginService extends ServerPluginService implements
DriftServerPluginServiceMBean {
-
- public TestMasterServerPluginContainer master;
- public MasterServerPluginContainerConfiguration masterConfig;
-
- public DriftServerPluginService() {
- // build the config at constructor time so tests have it even before the PC is
initialized
- File dir = new File(System.getProperty("java.io.tmpdir"),
"test-server-plugins");
- this.masterConfig = new MasterServerPluginContainerConfiguration(dir, dir, dir,
null);
- }
-
- @Override
- public MasterServerPluginContainer createMasterPluginContainer() {
- this.master = new TestMasterServerPluginContainer();
- this.master.initialize(this.masterConfig);
- return this.master;
- }
-
- class TestMasterServerPluginContainer extends MasterServerPluginContainer {
- @Override
- protected ClassLoader createRootServerPluginClassLoader() {
- return getClass().getClassLoader();
- }
-
- @Override
- protected Map<URL, ? extends ServerPluginDescriptorType>
preloadAllPlugins() throws Exception {
- // if our test never setup any plugins, ignore it and just return an empty
map
- File pluginDir = getConfiguration().getPluginDirectory();
- if (pluginDir == null || pluginDir.listFiles() == null ||
pluginDir.listFiles().length == 0) {
- return new HashMap<URL, ServerPluginDescriptorType>();
- } else {
- return super.preloadAllPlugins();
- }
- }
-
- @Override
- protected List<PluginKey> getDisabledPluginKeys() {
- // in the real world, the db is checked for enable flag, here we say all
plugins are enabled
- return new ArrayList<PluginKey>();
- }
-
- @Override
- protected List<AbstractTypeServerPluginContainer> createPluginContainers()
{
- ArrayList<AbstractTypeServerPluginContainer> pcs = new
ArrayList<AbstractTypeServerPluginContainer>(1);
- DriftServerPluginContainer driftPC = new
TestDriftServerPluginContainer(this);
- pcs.add(driftPC);
-
- return pcs;
- }
- }
-
- class TestDriftServerPluginContainer extends DriftServerPluginContainer {
- public TestDriftServerPluginContainer(MasterServerPluginContainer master) {
- super(master);
- }
-
- @Override
- protected ServerPluginManager createPluginManager() {
- return new TestDriftServerPluginManager(this);
- }
- }
-
- class TestDriftServerPluginManager extends DriftServerPluginManager {
- public TestDriftServerPluginManager(DriftServerPluginContainer pc) {
- super(pc);
- }
-
- @Override
- protected ServerPlugin getPlugin(ServerPluginEnvironment env) {
- try {
- Configuration pluginConfig = null;
- Configuration scheduledJobsConfig = null;
- ConfigurationDefinition configDef;
-
- ServerPluginDescriptorType pluginDescriptor = env.getPluginDescriptor();
-
- configDef =
ServerPluginDescriptorMetadataParser.getPluginConfigurationDefinition(pluginDescriptor);
- if (configDef != null) {
- pluginConfig = configDef.getDefaultTemplate().createConfiguration();
- }
-
- configDef =
ServerPluginDescriptorMetadataParser.getScheduledJobsDefinition(pluginDescriptor);
- if (configDef != null) {
- scheduledJobsConfig =
configDef.getDefaultTemplate().createConfiguration();
- }
-
- File pluginFile = new File(env.getPluginUrl().toURI());
- ServerPlugin plugin = new ServerPlugin(0,
env.getPluginKey().getPluginName(), pluginFile.getName(),
- pluginDescriptor.getDisplayName(), true, PluginStatusType.INSTALLED,
pluginDescriptor
- .getDescription(), "",
MessageDigestGenerator.getDigestString(pluginFile), pluginDescriptor
- .getVersion(), pluginDescriptor.getVersion(), pluginConfig,
scheduledJobsConfig,
- new ServerPluginType(pluginDescriptor).stringify(),
System.currentTimeMillis(), System
- .currentTimeMillis());
- return plugin;
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
- }
-}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginServiceMBean.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginServiceMBean.java
deleted file mode 100644
index d38374e..0000000
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/DriftServerPluginServiceMBean.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2011 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.drift;
-
-import org.rhq.enterprise.server.plugin.pc.ServerPluginServiceManagement;
-
-public interface DriftServerPluginServiceMBean extends ServerPluginServiceManagement {
-}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/DriftServerTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/DriftServerTest.java
deleted file mode 100644
index 3843f38..0000000
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/DriftServerTest.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2011 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.drift;
-
-import static org.rhq.core.domain.resource.ResourceCategory.SERVER;
-import static org.rhq.enterprise.server.util.LookupUtil.getSubjectManager;
-
-import java.io.File;
-import java.lang.reflect.Method;
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.NoResultException;
-import javax.persistence.NonUniqueResultException;
-
-import org.apache.commons.io.FileUtils;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import org.rhq.core.domain.auth.Subject;
-import org.rhq.core.domain.drift.Drift;
-import org.rhq.core.domain.drift.DriftDefinition;
-import org.rhq.core.domain.drift.DriftDefinitionTemplate;
-import org.rhq.core.domain.resource.Agent;
-import org.rhq.core.domain.resource.Resource;
-import org.rhq.core.domain.resource.ResourceType;
-import org.rhq.core.domain.shared.ResourceBuilder;
-import org.rhq.core.domain.shared.ResourceTypeBuilder;
-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.LookupUtil;
-import org.rhq.test.TransactionCallback;
-
-@Test(groups = "drift")
-public class DriftServerTest extends AbstractEJB3Test {
-
- protected final String RESOURCE_TYPE_NAME = getClass().getSimpleName() +
"_RESOURCE_TYPE";
-
- protected final String AGENT_NAME = getClass().getSimpleName() + "_AGENT";
-
- protected final String RESOURCE_NAME = getClass().getSimpleName() +
"_RESOURCE";
-
- private ServerPluginsLocal serverPluginsMgr;
-
- protected DriftServerPluginService driftServerPluginService;
-
- protected TestServerCommunicationsService agentServiceContainer;
-
- protected ResourceType resourceType;
-
- protected Agent agent;
-
- protected Resource resource;
-
- @BeforeMethod
- public void initServices(Method testMethod) throws Exception {
- initDriftServer();
- initAgentServices();
-
- InitDB annotation = testMethod.getAnnotation(InitDB.class);
- if (annotation == null || annotation.value()) {
- initDB();
- }
- }
-
- private void initDriftServer() throws Exception {
- driftServerPluginService = new DriftServerPluginService();
- prepareCustomServerPluginService(driftServerPluginService);
- driftServerPluginService.masterConfig.getPluginDirectory().mkdirs();
-
- File jpaDriftPlugin = new
File("../plugins/drift-rhq/target/rhq-serverplugin-drift-4.1.0-SNAPSHOT.jar");
- assertTrue("Drift server plugin JAR file not found at" +
jpaDriftPlugin.getPath(), jpaDriftPlugin.exists());
- FileUtils.copyFileToDirectory(jpaDriftPlugin,
driftServerPluginService.masterConfig.getPluginDirectory());
-
- driftServerPluginService.startMasterPluginContainer();
-
- serverPluginsMgr = LookupUtil.getServerPlugins();
- }
-
- private void initAgentServices() {
- agentServiceContainer = prepareForTestAgents();
- agentServiceContainer.driftService = new TestDefService();
- }
-
- @AfterMethod(inheritGroups = true)
- public void shutDownServices() throws Exception {
- shutDownDriftServer();
- shutDownAgentServices();
- }
-
- private void shutDownDriftServer() throws Exception {
- unprepareServerPluginService();
- driftServerPluginService.stopMasterPluginContainer();
- }
-
- private void shutDownAgentServices() {
- agentServiceContainer = null;
- unprepareForTestAgents();
- }
-
- @AfterClass(inheritGroups = true)
- public void cleanUpDB() throws Exception {
- purgeDB();
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- purgeDB(getEntityManager());
- }
- });
- }
-
- private void initDB() throws Exception {
- purgeDB();
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
- initResourceType();
- initAgent();
- initResource();
-
- em.persist(resourceType);
- em.persist(agent);
- resource.setAgent(agent);
- em.persist(resource);
-
- initDB(em);
- }
- });
- }
-
- private void purgeDB() {
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
-
- em.createQuery("delete from JPADrift ").executeUpdate();
- em.createQuery("delete from
JPADriftChangeSet").executeUpdate();
- em.createQuery("delete from JPADriftSet").executeUpdate();
- em.createQuery("delete from JPADriftFile").executeUpdate();
- em.createQuery("delete from DriftDefinition").executeUpdate();
- em.createQuery("delete from
DriftDefinitionTemplate").executeUpdate();
-
- deleteEntity(Resource.class, RESOURCE_NAME, em);
- deleteEntity(Agent.class, AGENT_NAME, em);
- deleteEntity(ResourceType.class, RESOURCE_TYPE_NAME, em);
-
- purgeDB(em);
- }
- });
- }
-
- protected void purgeDB(EntityManager em) {
- }
-
- protected void initDB(EntityManager em) {
- }
-
- protected void deleteEntity(Class<?> clazz, String name, EntityManager em) {
- try {
- Object entity = em.createQuery(
- "select entity from " + clazz.getSimpleName() + " entity
where entity.name = :name")
- .setParameter("name", name)
- .getSingleResult();
- em.remove(entity);
- } catch (NoResultException e) {
- // we can ignore no results because this code will run when the db
- // is empty and we expect no results in that case
- } catch (NonUniqueResultException e) {
- // we will fail here to let the person running the test know that
- // the database may not be in a consistent state
- fail("Purging " + name + " failed. Expected to find one
instance of " + clazz.getSimpleName() +
- " but found more than one. The database may not be in a consistent
state.");
- }
- }
-
- protected void initResourceType() {
- resourceType = new ResourceTypeBuilder().createResourceType()
- .withId(0)
- .withName(RESOURCE_TYPE_NAME)
- .withCategory(SERVER)
- .withPlugin(RESOURCE_TYPE_NAME.toLowerCase())
- .build();
- }
-
- protected void initAgent() {
- agent = new Agent(AGENT_NAME, "localhost", 1, "", AGENT_NAME
+ "_TOKEN");
- }
-
- protected void initResource() {
- resource = new ResourceBuilder().createResource()
- .withId(0)
- .withName(RESOURCE_NAME)
- .withResourceKey(RESOURCE_NAME)
- .withRandomUuid()
- .withResourceType(resourceType)
- .build();
- }
-
- protected Subject getOverlord() {
- return getSubjectManager().getOverlord();
- }
-
- protected String toString(DriftDefinition def) {
- return "DriftDefinition[id: " + def.getId() + ", name: " +
def.getName() + "]";
- }
-
- protected String toString(DriftDefinitionTemplate template) {
- return DriftDefinitionTemplate.class.getSimpleName() + "[id: " +
template.getId() + ", name: " +
- template.getName() + "]";
- }
-
- protected Drift findDriftByPath(List<? extends Drift> drifts, String path) {
- for (Drift drift : drifts) {
- if (drift.getPath().equals(path)) {
- return drift;
- }
- }
- return null;
- }
-}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
deleted file mode 100644
index 125dfb3..0000000
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/DriftTemplateManagerBeanTest.java
+++ /dev/null
@@ -1,600 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2011 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.drift;
-
-import static java.util.Arrays.asList;
-import static org.rhq.core.domain.common.EntityContext.forResource;
-import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
-import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
-import static org.rhq.core.domain.drift.DriftChangeSetCategory.DRIFT;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.normal;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.plannedChanges;
-import static
org.rhq.core.domain.drift.DriftDefinitionComparator.CompareMode.BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS;
-import static
org.rhq.enterprise.server.safeinvoker.HibernateDetachUtility.SerializationType.SERIALIZATION;
-import static org.rhq.enterprise.server.util.LookupUtil.getDriftManager;
-import static org.rhq.enterprise.server.util.LookupUtil.getDriftTemplateManager;
-import static org.rhq.test.AssertUtils.assertCollectionMatchesNoOrder;
-import static org.rhq.test.AssertUtils.assertPropertiesMatch;
-
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-
-import javax.ejb.EJBException;
-import javax.persistence.EntityManager;
-
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import org.rhq.core.domain.configuration.Configuration;
-import org.rhq.core.domain.criteria.DriftDefinitionCriteria;
-import org.rhq.core.domain.criteria.DriftDefinitionTemplateCriteria;
-import org.rhq.core.domain.criteria.GenericDriftChangeSetCriteria;
-import org.rhq.core.domain.criteria.JPADriftChangeSetCriteria;
-import org.rhq.core.domain.drift.Drift;
-import org.rhq.core.domain.drift.DriftChangeSet;
-import org.rhq.core.domain.drift.DriftDefinition;
-import org.rhq.core.domain.drift.DriftDefinitionComparator;
-import org.rhq.core.domain.drift.DriftDefinitionTemplate;
-import org.rhq.core.domain.drift.DriftSnapshot;
-import org.rhq.core.domain.drift.Filter;
-import org.rhq.core.domain.drift.JPADrift;
-import org.rhq.core.domain.drift.JPADriftChangeSet;
-import org.rhq.core.domain.drift.JPADriftFile;
-import org.rhq.core.domain.drift.JPADriftSet;
-import org.rhq.core.domain.resource.Resource;
-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.TransactionCallback;
-
-public class DriftTemplateManagerBeanTest extends DriftServerTest {
-
- private DriftTemplateManagerLocal templateMgr;
-
- private DriftManagerLocal driftMgr;
-
- private List<Resource> resources = new LinkedList<Resource>();
-
- private JPADrift drift1;
- private JPADrift drift2;
- private JPADriftFile driftFile1;
- private JPADriftFile driftFile2;
-
- @BeforeClass
- public void initClass() {
- templateMgr = getDriftTemplateManager();
- driftMgr = getDriftManager();
-
- }
-
- @Override
- protected void initDB(EntityManager em) {
- agentServiceContainer.driftService = new TestDefService() {
- @Override
- public void unscheduleDriftDetection(int resourceId, DriftDefinition
driftDef) {
- detach(driftDef);
- }
-
- @Override
- public void updateDriftDetection(int resourceId, DriftDefinition driftDef) {
- detach(driftDef);
- }
-
- @Override
- public void updateDriftDetection(int resourceId, DriftDefinition driftDef,
DriftSnapshot driftSnapshot) {
- detach(driftDef);
- detach(driftSnapshot);
- }
-
- private void detach(Object object) {
- try {
- HibernateDetachUtility.nullOutUninitializedFields(object,
SERIALIZATION);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
- };
- }
-
- public void createNewTemplate() {
- final DriftDefinition definition = new DriftDefinition(new Configuration());
- definition.setName("test::createNewTemplate");
- definition.setEnabled(true);
- definition.setDriftHandlingMode(normal);
- definition.setInterval(2400L);
- definition.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
-
- final DriftDefinitionTemplate newTemplate =
templateMgr.createTemplate(getOverlord(), resourceType.getId(),
- true, definition);
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
-
- ResourceType updatedType = em.find(ResourceType.class,
resourceType.getId());
-
- assertEquals("Failed to add new drift definition to resource
type", 1, updatedType
- .getDriftDefinitionTemplates().size());
-
- DriftDefinitionTemplate expectedTemplate = new
DriftDefinitionTemplate();
- expectedTemplate.setTemplateDefinition(definition);
- expectedTemplate.setUserDefined(true);
-
- assertDriftTemplateEquals("Failed to save template",
expectedTemplate, newTemplate);
- assertTrue("The template should have its id set",
newTemplate.getId() > 0);
- }
- });
- }
-
- public void createTemplateForNegativeUpdateTests() {
- DriftDefinition definition = new DriftDefinition(new Configuration());
- definition.setName("test::createTemplateForNegativeUpdateTests");
- definition.setEnabled(true);
- definition.setDriftHandlingMode(normal);
- definition.setInterval(2400L);
- definition.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
-
- templateMgr.createTemplate(getOverlord(), resourceType.getId(), true,
definition);
-
- assertNotNull("Failed to load template",
loadTemplate(definition.getName()));
- }
-
- @Test(dependsOnMethods = "createTemplateForNegativeUpdateTests",
- expectedExceptions = EJBException.class,
- expectedExceptionsMessageRegExp = ".*base directory.*cannot be
modified")
- @InitDB(false)
- public void doNotAllowBaseDirToBeUpdated() {
- DriftDefinitionTemplate template =
loadTemplate("test::createTemplateForNegativeUpdateTests");
- DriftDefinition definition = template.getTemplateDefinition();
- definition.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/TEST"));
-
- templateMgr.updateTemplate(getOverlord(), template);
- }
-
- @Test(dependsOnMethods = "createTemplateForNegativeUpdateTests",
- expectedExceptions = EJBException.class,
- expectedExceptionsMessageRegExp = ".*filters.*cannot be modified")
- @InitDB(false)
- public void doNotAllowFiltersToBeUpdated() {
- DriftDefinitionTemplate template =
loadTemplate("test::createTemplateForNegativeUpdateTests");
- DriftDefinition definition = template.getTemplateDefinition();
- definition.addExclude(new Filter("/foo/bar/TEST/conf",
"*.xml"));
-
- templateMgr.updateTemplate(getOverlord(), template);
- }
-
- @Test(dependsOnMethods = "createTemplateForNegativeUpdateTests",
- expectedExceptions = EJBException.class,
- expectedExceptionsMessageRegExp = ".*name.*cannot be modified")
- @InitDB(false)
- public void doNotAllowTemplateNameToBeUpdated() {
- DriftDefinitionTemplate template =
loadTemplate("test::createTemplateForNegativeUpdateTests");
- template.setName("A new name");
-
- templateMgr.updateTemplate(getOverlord(), template);
- }
-
- public void createAndUpdateTemplate() {
- // create the template
- DriftDefinition definition = new DriftDefinition(new Configuration());
- definition.setName("test::updateTemplate");
- definition.setDescription("update template test");
- definition.setEnabled(true);
- definition.setDriftHandlingMode(normal);
- definition.setInterval(2400L);
- definition.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
-
- DriftDefinitionTemplate template = templateMgr.createTemplate(getOverlord(),
resourceType.getId(), true,
- definition);
-
- // next create some definitions from the template
- final DriftDefinition attachedDef1 = createDefinition(template,
"attachedDef1", true);
- final DriftDefinition attachedDef2 = createDefinition(template,
"attachedDef2", true);
- final DriftDefinition detachedDef1 = createDefinition(template,
"detachedDef1", false);
- final DriftDefinition detachedDef2 = createDefinition(template,
"detachedDef2", false);
-
- driftMgr.updateDriftDefinition(getOverlord(), forResource(resource.getId()),
attachedDef1);
- driftMgr.updateDriftDefinition(getOverlord(), forResource(resource.getId()),
attachedDef2);
- driftMgr.updateDriftDefinition(getOverlord(), forResource(resource.getId()),
detachedDef1);
- driftMgr.updateDriftDefinition(getOverlord(), forResource(resource.getId()),
detachedDef2);
-
- // update the template
- final DriftDefinition newTemplateDef = template.getTemplateDefinition();
- newTemplateDef.setInterval(4800L);
- newTemplateDef.setDriftHandlingMode(plannedChanges);
- newTemplateDef.setEnabled(false);
-
- templateMgr.updateTemplate(getOverlord(), template);
-
- // verify that the tempalte has been updated
- final DriftDefinitionTemplate updatedTemplate =
loadTemplate(template.getName());
- assertPropertiesMatch("Failed to update template", template,
updatedTemplate, "resourceType",
- "driftDefinitions", "templateDefinition");
-
- // verify that attached definitions are updated.
- for (DriftDefinition def : asList(attachedDef1, attachedDef2)) {
- DriftDefinition updatedDef = loadDefinition(def.getId());
- String msg = "Failed to propagate update to attached definition " +
toString(updatedDef) + " - ";
- DriftDefinition updatedTemplateDef =
updatedTemplate.getTemplateDefinition();
-
- assertEquals(msg + "enabled property not updated",
updatedTemplateDef.isEnabled(),
- updatedDef.isEnabled());
- assertEquals(msg + "driftHandlingMode property not updated",
- updatedTemplateDef.getDriftHandlingMode(),
updatedDef.getDriftHandlingMode());
- assertEquals(msg + "interval property not updated",
updatedTemplateDef.getInterval(),
- updatedDef.getInterval());
- }
-
- // verify that the detached definitions have not been updated.
- for (DriftDefinition def : asList(detachedDef1, detachedDef2)) {
- DriftDefinition defAfterUpdate = loadDefinition(def.getId());
- String msg = "Detached definition " + toString(def) + " should
not get updated - ";
-
- assertEquals(msg + "enabled property was modified",
def.isEnabled(), defAfterUpdate.isEnabled());
- assertEquals(msg + "driftHandlingMode property was modified",
def.getDriftHandlingMode(),
- defAfterUpdate.getDriftHandlingMode());
- assertEquals(msg + "interval property was modified",
def.getInterval(), defAfterUpdate.getInterval());
- }
- }
-
-
- @SuppressWarnings("unchecked")
- public void pinTemplate() throws Exception {
- // First create the template
- final DriftDefinition templateDef = new DriftDefinition(new Configuration());
- templateDef.setName("test::pinTemplate");
- templateDef.setEnabled(true);
- templateDef.setDriftHandlingMode(normal);
- templateDef.setInterval(2400L);
- templateDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
-
- final DriftDefinitionTemplate template =
templateMgr.createTemplate(getOverlord(),
- resourceType.getId(), true, templateDef);
-
- // next create some resource level definitions
- final DriftDefinition attachedDef1 = createDefinition(template,
"attachedDef1", true);
- final DriftDefinition attachedDef2 = createDefinition(template,
"attachedDef2", true);
- final DriftDefinition detachedDef1 = createDefinition(template,
"detachedDef1", false);
- final DriftDefinition detachedDef2 = createDefinition(template,
"detachedDef2", false);
-
- // create initial change set from which the snapshot will be generated
- final JPADriftChangeSet changeSet0 = new JPADriftChangeSet(resource, 0, COVERAGE,
attachedDef1);
-
- driftFile1 = new JPADriftFile("a1b2c3");
- drift1 = new JPADrift(changeSet0, "drift.1", FILE_ADDED, null,
driftFile1);
-
- final JPADriftSet driftSet = new JPADriftSet();
- driftSet.addDrift(drift1);
-
- // create change set v1
- driftFile2 = new JPADriftFile("1a2b3c");
- final JPADriftChangeSet changeSet1 = new JPADriftChangeSet(resource, 1, DRIFT,
attachedDef1);
- drift2 = new JPADrift(changeSet1, "drift.2", FILE_ADDED, null,
driftFile2);
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
-
- em.persist(attachedDef1);
-
- em.persist(driftFile1);
- em.persist(driftFile2);
-
- em.persist(changeSet0);
- em.persist(driftSet);
- changeSet0.setInitialDriftSet(driftSet);
- em.merge(changeSet0);
-
- em.persist(changeSet1);
- em.persist(drift2);
-
- em.persist(attachedDef2);
- em.persist(detachedDef1);
- em.persist(detachedDef2);
- }
- });
-
- // now we pin the snapshot to the template
- templateMgr.pinTemplate(getOverlord(), template.getId(), attachedDef1.getId(),
1);
-
- // verify that the template is now pinned
- DriftDefinitionTemplate updatedTemplate = loadTemplate(template.getName());
- assertTrue("Template should be marked pinned",
updatedTemplate.isPinned());
- }
-
- @Test(dependsOnMethods = "pinTemplate")
- @InitDB(false)
- public void persistChangeSetWhenTemplateGetsPinned() throws Exception {
- DriftDefinitionTemplate template = loadTemplate("test::pinTemplate");
-
- GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
- criteria.addFilterId(template.getChangeSetId());
-
- PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
- criteria);
-
- assertEquals("Expected to find change set for pinned template", 1,
changeSets.size());
-
- JPADriftChangeSet expectedChangeSet = new JPADriftChangeSet(resource, 1,
COVERAGE, null);
- List<? extends Drift> expectedDrifts = asList(
- new JPADrift(expectedChangeSet, "drift.1", FILE_ADDED, null,
driftFile1),
- new JPADrift(expectedChangeSet, drift2.getPath(), FILE_ADDED, null,
driftFile2));
-
- DriftChangeSet<?> actualChangeSet = changeSets.get(0);
- List<? extends Drift> actualDrifts = new
ArrayList(actualChangeSet.getDrifts());
-
- assertCollectionMatchesNoOrder("Expected to find drifts from change sets 1
and 2 in the template change set",
- (List<Drift>)expectedDrifts, (List<Drift>)actualDrifts,
"id", "ctime", "changeSet", "newDriftFile");
-
- // we need to compare the newDriftFile properties separately because
- // assertCollectionMatchesNoOrder compares properties via equals() and
JPADriftFile
- // does not implement equals.
- assertPropertiesMatch(drift1.getNewDriftFile(), findDriftByPath(actualDrifts,
"drift.1").getNewDriftFile(),
- "The newDriftFile property was not set correctly for " + drift1);
- assertPropertiesMatch(drift2.getNewDriftFile(), findDriftByPath(actualDrifts,
"drift.2").getNewDriftFile(),
- "The newDriftFile property was not set correctly for " + drift1);
- }
-
- @Test(dependsOnMethods = "pinTemplate")
- @InitDB(false)
- public void updateAttachedDefinitionsWhenTemplateGetsPinned() throws Exception {
- DriftDefinitionTemplate template = loadTemplate("test::pinTemplate");
-
- // get the attached definitions
- List<DriftDefinition> attachedDefs = new
LinkedList<DriftDefinition>();
- for (DriftDefinition d : template.getDriftDefinitions()) {
- if (d.isAttached() && (d.getName().equals("attachedDef1")
|| d.getName().equals("attachedDef2"))) {
- attachedDefs.add(d);
- }
- }
- assertEquals("Failed to get attached definitions for " +
toString(template), 2, attachedDefs.size());
- assertDefinitionIsPinned(attachedDefs.get(0));
- assertDefinitionIsPinned(attachedDefs.get(1));
- }
-
- @Test(dependsOnMethods = "pinTemplate")
- @InitDB(false)
- public void doNotUpdateDetachedDefinitionsWhenTemplateGetsPinned() throws Exception
{
- DriftDefinitionTemplate template = loadTemplate("test::pinTemplate");
-
- // get the detached definitions
- List<DriftDefinition> detachedDefs = new
LinkedList<DriftDefinition>();
- for (DriftDefinition d : template.getDriftDefinitions()) {
- if (!d.isAttached() && (d.getName().equals("detachedDef1")
|| d.getName().equals("detachedDef2"))) {
- detachedDefs.add(d);
- }
- }
- assertEquals("Failed to get detached definitions for " +
toString(template), 2, detachedDefs.size());
- assertDefinitionIsNotPinned(detachedDefs.get(0));
- assertDefinitionIsNotPinned(detachedDefs.get(1));
- }
-
- public void deleteTemplate() throws Exception {
- // first create the template
- final DriftDefinition templateDef = new DriftDefinition(new Configuration());
- templateDef.setName("test::pinTemplate");
- templateDef.setEnabled(true);
- templateDef.setDriftHandlingMode(normal);
- templateDef.setInterval(2400L);
- templateDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
-
- final DriftDefinitionTemplate template =
templateMgr.createTemplate(getOverlord(),
- resourceType.getId(), true, templateDef);
-
- // next create some resource level definitions
- final DriftDefinition attachedDef1 = createDefinition(template,
"attachedDef1", true);
- final DriftDefinition attachedDef2 = createDefinition(template,
"attachedDef2", true);
- final DriftDefinition detachedDef1 = createDefinition(template,
"detachedDef1", false);
- final DriftDefinition detachedDef2 = createDefinition(template,
"detachedDef2", false);
-
- // create some change sets
- final JPADriftChangeSet changeSet0 = new JPADriftChangeSet(resource, 0, COVERAGE,
attachedDef1);
-
- driftFile1 = new JPADriftFile("a1b2c3");
- drift1 = new JPADrift(changeSet0, "drift.1", FILE_ADDED, null,
driftFile1);
-
- final JPADriftSet driftSet0 = new JPADriftSet();
- driftSet0.addDrift(drift1);
-
- final JPADriftChangeSet changeSet1 = new JPADriftChangeSet(resource, 0, DRIFT,
detachedDef1);
-
- driftFile2 = new JPADriftFile("1a2b3c");
- drift2 = new JPADrift(changeSet1, "drift.2", FILE_ADDED, null,
driftFile2);
-
- final JPADriftSet driftSet1 = new JPADriftSet();
- driftSet1.addDrift(drift2);
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
-
- em.persist(attachedDef1);
- em.persist(attachedDef2);
- em.persist(detachedDef1);
- em.persist(detachedDef2);
-
- em.persist(driftFile1);
- em.persist(driftFile2);
-
- em.persist(changeSet0);
- em.persist(driftSet0);
- changeSet0.setInitialDriftSet(driftSet0);
- em.merge(changeSet0);
-
- em.persist(changeSet1);
- em.persist(driftSet1);
- changeSet1.setInitialDriftSet(driftSet1);
- em.merge(changeSet1);
- }
- });
-
- // delete the template
- templateMgr.deleteTemplate(getOverlord(), template.getId());
-
- // verify that attached definitions along with their change sets have
- // been deleted
- assertNull("Change sets belonging to attached definitions should be
deleted", loadChangeSet(changeSet0.getId()));
- assertNull("Attached definition " + toString(attachedDef1) + "
should be deleted",
- loadDefinition(attachedDef1.getId()));
- assertNull("Attached definition " + toString(attachedDef2) + "
should be deleted",
- loadDefinition(attachedDef2.getId()));
-
- // verify that detached definitions along with their change sets have not been
deleted
- assertNotNull("Change sets belonging to detached definitions should not be
deleted",
- loadChangeSet(changeSet1.getId()));
- assertDetachedDefinitionNotDeleted(detachedDef1.getId());
- assertDetachedDefinitionNotDeleted(detachedDef2.getId());
-
- // verify that the template itself has been deleted
- assertNull("The template " + toString(template) + " should have
been deleted",
- loadTemplate(template.getName(), false));
- }
-
- private void assertDefinitionIsPinned(DriftDefinition definition) throws Exception {
- // verify that the definition is marked as pinned
- assertTrue("Expected " + toString(definition) + " to be
pinned", definition.isPinned());
-
- // verify that the initial change set is generated for the definition
- JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
- criteria.addFilterDriftDefinitionId(definition.getId());
- criteria.addFilterCategory(COVERAGE);
- criteria.fetchDrifts(true);
-
- PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
- criteria);
- assertEquals("Expected to find one change set", 1, changeSets.size());
-
- JPADriftChangeSet expectedChangeSet = new JPADriftChangeSet(resource, 1,
COVERAGE, null);
- List<? extends Drift> expectedDrifts = asList(
- new JPADrift(expectedChangeSet, drift1.getPath(), FILE_ADDED, null,
driftFile1),
- new JPADrift(expectedChangeSet, drift2.getPath(), FILE_ADDED, null,
driftFile2));
-
- DriftChangeSet<?> actualChangeSet = changeSets.get(0);
- List<? extends Drift> actualDrifts = new
ArrayList(actualChangeSet.getDrifts());
-
- assertCollectionMatchesNoOrder("Expected to find drifts from change sets 1
and 2 in the template change set",
- (List<Drift>)expectedDrifts, (List<Drift>)actualDrifts,
"id", "ctime", "changeSet", "newDriftFile");
-
- // Finally make sure that there are no other change sets
- criteria = new JPADriftChangeSetCriteria();
- criteria.addFilterStartVersion(1);
- criteria.addFilterDriftDefinitionId(definition.getId());
-
- assertEquals("There should not be any drift change sets", 0,
- driftMgr.findDriftChangeSetsByCriteria(getOverlord(), criteria).size());
- }
-
- private void assertDefinitionIsNotPinned(DriftDefinition definition) throws Exception
{
- // verify that the definition is not pinned
- assertFalse("Expected " + toString(definition) + " to be
unpinned", definition.isPinned());
-
- // Note that this method assumes that the definition has no change sets
- // associated with it and therefore checks that there are no change sets.
- JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
- criteria.addFilterDriftDefinitionId(definition.getId());
-
- PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
- criteria);
- assertEquals("Did not expect to find any change sets for " +
toString(definition) + ". Note that this " +
- "assertion method assumes that the definition you are testing is not
supposed to have any change sets.",
- 0, changeSets.size());
- }
-
- private void assertDriftTemplateEquals(String msg, DriftDefinitionTemplate expected,
DriftDefinitionTemplate actual) {
- assertPropertiesMatch(msg + ": basic drift definition template properties do
not match", expected, actual,
- "id", "resourceType", "ctime",
"templateDefinition");
- assertDriftDefEquals(msg + ": template definitions do not match",
expected.getTemplateDefinition(), actual
- .getTemplateDefinition());
- }
-
- private void assertDriftDefEquals(String msg, DriftDefinition expected,
DriftDefinition actual) {
- DriftDefinitionComparator comparator = new DriftDefinitionComparator(
- BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS);
- assertEquals(msg, 0, comparator.compare(expected, actual));
- }
-
- private void assertDetachedDefinitionNotDeleted(int definitionId) {
- DriftDefinition definition = loadDefinition(definitionId);
- assertNotNull("Detached definition " + toString(definition) + "
should not be deleted", definition);
- assertNull("The detached definition's template reference should be set
to null when the template is deleted",
- definition.getTemplate());
- }
-
- private DriftDefinition createDefinition(DriftDefinitionTemplate template, String
defName, boolean isAttached) {
- DriftDefinition def = template.createDefinition();
- def.setName(defName);
- def.setAttached(isAttached);
- def.setTemplate(template);
- def.setResource(resource);
- return def;
- }
-
- private DriftDefinitionTemplate loadTemplate(String name) {
- return loadTemplate(name, true);
- }
-
- private DriftDefinitionTemplate loadTemplate(String name, boolean
verifyResultsUnique) {
- DriftDefinitionTemplateCriteria criteria = new
DriftDefinitionTemplateCriteria();
- criteria.addFilterResourceTypeId(resourceType.getId());
- criteria.addFilterName(name);
- criteria.fetchDriftDefinitions(true);
-
- PageList<DriftDefinitionTemplate> templates =
templateMgr.findTemplatesByCriteria(getOverlord(), criteria);
- if (verifyResultsUnique) {
- assertEquals("Expected to find one template", 1,
templates.size());
- }
-
- if (templates.isEmpty()) {
- return null;
- }
- return templates.get(0);
- }
-
- private DriftDefinition loadDefinition(int definitionId) {
- DriftDefinitionCriteria criteria = new DriftDefinitionCriteria();
- criteria.addFilterId(definitionId);
- criteria.fetchConfiguration(true);
- criteria.fetchTemplate(true);
- PageList<DriftDefinition> definitions =
driftMgr.findDriftDefinitionsByCriteria(getOverlord(), criteria);
-
- if (definitions.isEmpty()) {
- return null;
- }
- return definitions.get(0);
- }
-
- private DriftChangeSet<?> loadChangeSet(String id) throws Exception {
- GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
- criteria.addFilterId(id);
- PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
- criteria);
-
- if (changeSets.isEmpty()) {
- return null;
- }
- return changeSets.get(0);
- }
-
-}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/InitDB.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/InitDB.java
deleted file mode 100644
index 65a6523..0000000
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/InitDB.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2011 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.drift;
-
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-@Retention(RUNTIME)
-(a)Target({ElementType.METHOD })
-public @interface InitDB {
- boolean value() default true;
-}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
deleted file mode 100644
index 2b3b33a..0000000
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/JPADriftServerBeanTest.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2011 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.drift;
-
-import static java.util.Arrays.asList;
-import static org.apache.commons.io.IOUtils.toInputStream;
-import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
-import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.normal;
-import static org.rhq.core.domain.drift.DriftFileStatus.LOADED;
-import static org.rhq.enterprise.server.util.LookupUtil.getJPADriftServer;
-import static org.rhq.test.AssertUtils.assertCollectionMatchesNoOrder;
-import static org.rhq.test.AssertUtils.assertPropertiesMatch;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import javax.persistence.EntityManager;
-
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-
-import org.rhq.core.domain.configuration.Configuration;
-import org.rhq.core.domain.criteria.JPADriftChangeSetCriteria;
-import org.rhq.core.domain.drift.Drift;
-import org.rhq.core.domain.drift.DriftDefinition;
-import org.rhq.core.domain.drift.JPADrift;
-import org.rhq.core.domain.drift.JPADriftChangeSet;
-import org.rhq.core.domain.drift.JPADriftFile;
-import org.rhq.core.domain.drift.JPADriftSet;
-import org.rhq.core.domain.drift.dto.DriftChangeSetDTO;
-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.TransactionCallback;
-
-public class JPADriftServerBeanTest extends DriftServerTest {
-
- private JPADriftServerLocal jpaDriftServer;
-
- private final String DRIFT_FILE_1_ID = "a1b2c3d4";
-
- private final String DRIFT_FILE_2_ID = "1ab2b3c4d";
-
- private JPADriftFile driftFile1;
-
- private JPADriftFile driftFile2;
-
- @BeforeClass
- public void initTests() {
- jpaDriftServer = getJPADriftServer();
- }
-
- @BeforeMethod
- public void persistDriftFiles() throws Exception {
- driftFile1 = jpaDriftServer.persistDriftFile(new JPADriftFile(DRIFT_FILE_1_ID));
- driftFile2 = jpaDriftServer.persistDriftFile(new JPADriftFile(DRIFT_FILE_2_ID));
-
- String driftFile1Content = "drift file 1 content...";
- String driftFile2Content = "drift file 2 content...";
-
- jpaDriftServer.persistDriftFileData(driftFile1, toInputStream(driftFile1Content),
driftFile1Content.length());
- jpaDriftServer.persistDriftFileData(driftFile2, toInputStream(driftFile2Content),
driftFile2Content.length());
-
- driftFile1 = jpaDriftServer.getDriftFile(getOverlord(), DRIFT_FILE_1_ID);
- driftFile2 = jpaDriftServer.getDriftFile(getOverlord(), DRIFT_FILE_2_ID);
-
- assertDriftFilePersisted(driftFile1, "driftFile1", driftFile1Content);
- assertDriftFilePersisted(driftFile2, "driftFile2", driftFile2Content);
- }
-
- public void persistResourceChangeSet() {
- // first create and persist the drift definition
- final DriftDefinition driftDef = new DriftDefinition(new Configuration());
- driftDef.setName("test::persistResourceChangeSet");
- driftDef.setEnabled(true);
- driftDef.setDriftHandlingMode(normal);
- driftDef.setInterval(2400L);
- driftDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
- driftDef.setResource(resource);
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
- em.persist(driftDef);
- }
- });
-
- // create the change set to be persisted
- DriftChangeSetDTO changeSet = new DriftChangeSetDTO();
- changeSet.setCategory(COVERAGE);
- changeSet.setVersion(1);
- changeSet.setDriftDefinitionId(driftDef.getId());
- changeSet.setResourceId(resource.getId());
- changeSet.setDriftHandlingMode(normal);
- changeSet.setCtime(System.currentTimeMillis());
-
- DriftDTO drift1 = new DriftDTO();
- drift1.setCategory(FILE_ADDED);
- drift1.setPath("drift.1");
- drift1.setChangeSet(changeSet);
- drift1.setCtime(System.currentTimeMillis());
- drift1.setNewDriftFile(toDTo(driftFile1));
-
- DriftDTO drift2 = new DriftDTO();
- drift2.setCategory(FILE_ADDED);
- drift2.setPath("drift.2");
- drift2.setChangeSet(changeSet);
- drift2.setCtime(System.currentTimeMillis());
- drift2.setNewDriftFile(toDTo(driftFile2));
-
- Set<DriftDTO> drifts = new HashSet<DriftDTO>();
- drifts.add(drift1);
- drifts.add(drift2);
- changeSet.setDrifts(drifts);
-
- String newChangeSetId = jpaDriftServer.persistChangeSet(getOverlord(),
changeSet);
-
- // verify that the change set was persisted
- JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
- criteria.addFilterId(newChangeSetId);
- criteria.fetchDrifts(true);
-
- PageList<JPADriftChangeSet> changeSets =
jpaDriftServer.findDriftChangeSetsByCriteria(getOverlord(), criteria);
- assertEquals("Expected to find one change set", 1, changeSets.size());
-
- JPADriftChangeSet jpaChangeSet = changeSets.get(0);
- assertEquals("Expected change set to contain two drifts. This could be a
result of the change set not being " +
- "persisted correctly or the criteria fetch being done
incorrectly.", 2, jpaChangeSet.getDrifts().size());
-
- assertPropertiesMatch("The change set was not persisted correctly",
changeSet, jpaChangeSet, "id", "drifts",
- "class", "ctime");
-
- List<? extends Drift> expectedDrifts = asList(drift1, drift2);
- List<? extends Drift> actualDrifts = new
ArrayList(jpaChangeSet.getDrifts());
-
- // We ignore the id and ctime properties because those are set by
JPADriftServerBean
- // and are somewhat implmentation specific. We ignore the directory property
because
- // it is really a calculated property. newDriftFile has to be compared
separately
- // since it does not implement equals.
- assertCollectionMatchesNoOrder("The change set drifts were not persisted
correctly",
- (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "directory",
- "newDriftFile", "class");
-
- assertPropertiesMatch("The newDriftFile property was not set correctly for
" + drift1, drift1.getNewDriftFile(),
- findDriftByPath(actualDrifts, "drift.1").getNewDriftFile(),
"class", "ctime") ;
- assertPropertiesMatch("The newDriftFile property was not set correctly for
" + drift2, drift2.getNewDriftFile(),
- findDriftByPath(actualDrifts, "drift.2").getNewDriftFile(),
"class", "ctime") ;
- }
-
- public void persistTemplateChangeSet() {
- // create the change set to be persisted
- //
- // Note that we do not set the drift definition id or resource id since
- // the change set is not owned by a resource. It is owned by the
- // resource type.
- DriftChangeSetDTO changeSet = new DriftChangeSetDTO();
- changeSet.setCategory(COVERAGE);
- changeSet.setVersion(1);
- changeSet.setDriftHandlingMode(normal);
- changeSet.setCtime(System.currentTimeMillis());
-
- DriftDTO drift1 = new DriftDTO();
- drift1.setCategory(FILE_ADDED);
- drift1.setPath("drift.1");
- drift1.setChangeSet(changeSet);
- drift1.setCtime(System.currentTimeMillis());
- drift1.setNewDriftFile(toDTo(driftFile1));
-
- DriftDTO drift2 = new DriftDTO();
- drift2.setCategory(FILE_ADDED);
- drift2.setPath("drift.2");
- drift2.setChangeSet(changeSet);
- drift2.setCtime(System.currentTimeMillis());
- drift2.setNewDriftFile(toDTo(driftFile2));
-
- Set<DriftDTO> drifts = new HashSet<DriftDTO>();
- drifts.add(drift1);
- drifts.add(drift2);
- changeSet.setDrifts(drifts);
-
- String newChangeSetId = jpaDriftServer.persistChangeSet(getOverlord(),
changeSet);
-
- // verify that the change set was persisted
- JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
- criteria.addFilterId(newChangeSetId);
- criteria.fetchDrifts(true);
-
- PageList<JPADriftChangeSet> changeSets =
jpaDriftServer.findDriftChangeSetsByCriteria(getOverlord(), criteria);
- assertEquals("Expected to find one change set", 1, changeSets.size());
-
- JPADriftChangeSet jpaChangeSet = changeSets.get(0);
- assertEquals("Expected change set to contain two drifts. This could be a
result of the change set not being " +
- "persisted correctly or the criteria fetch being done
incorrectly.", 2, jpaChangeSet.getDrifts().size());
-
- assertPropertiesMatch("The change set was not persisted correctly",
changeSet, jpaChangeSet, "id", "drifts",
- "class", "ctime");
-
- List<? extends Drift> expectedDrifts = asList(drift1, drift2);
- List<? extends Drift> actualDrifts = new
ArrayList(jpaChangeSet.getDrifts());
-
- // We ignore the id and ctime properties because those are set by
JPADriftServerBean
- // and are somewhat implmentation specific. We ignore the directory property
because
- // it is really a calculated property. newDriftFile has to be compared
separately
- // since it does not implement equals.
- assertCollectionMatchesNoOrder("The change set drifts were not persisted
correctly",
- (List<Drift>) expectedDrifts, (List<Drift>) actualDrifts,
"id", "ctime", "changeSet", "directory",
- "newDriftFile", "class");
-
- assertPropertiesMatch("The newDriftFile property was not set correctly for
" + drift1, drift1.getNewDriftFile(),
- findDriftByPath(actualDrifts, "drift.1").getNewDriftFile(),
"class", "ctime") ;
- assertPropertiesMatch("The newDriftFile property was not set correctly for
" + drift2, drift2.getNewDriftFile(),
- findDriftByPath(actualDrifts, "drift.2").getNewDriftFile(),
"class", "ctime") ;
- }
-
- public void copyChangeSet() {
- // first create the change set that will be copied
- final JPADriftChangeSet changeSet = new JPADriftChangeSet(null, 0, COVERAGE,
null);
- changeSet.setDriftHandlingMode(normal);
-
- final JPADrift drift1 = new JPADrift(changeSet, "drift.1", FILE_ADDED,
null, driftFile1);
- final JPADrift drift2 = new JPADrift(changeSet, "drift.2", FILE_ADDED,
null, driftFile2);
-
- final JPADriftSet driftSet = new JPADriftSet();
- driftSet.addDrift(drift1);
- driftSet.addDrift(drift2);
-
- // next create the drift definition
- final DriftDefinition driftDef = new DriftDefinition(new Configuration());
- driftDef.setName("test::copyChangeSet");
- driftDef.setEnabled(true);
- driftDef.setDriftHandlingMode(normal);
- driftDef.setInterval(2400L);
- driftDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
- driftDef.setResource(resource);
-
- // persist the change set and drift definition
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
- em.persist(changeSet);
- em.persist(driftDef);
- em.persist(driftSet);
- changeSet.setInitialDriftSet(driftSet);
- em.merge(changeSet);
- }
- });
-
- jpaDriftServer.copyChangeSet(getOverlord(), changeSet.getId(), driftDef.getId(),
resource.getId());
-
- // verify that the change set was created for the definition
- JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
- criteria.addFilterDriftDefinitionId(driftDef.getId());
- criteria.addFilterCategory(COVERAGE);
-
- PageList<JPADriftChangeSet> changeSets =
jpaDriftServer.findDriftChangeSetsByCriteria(getOverlord(), criteria);
-
- assertEquals("Expected to get back one change set",
1,changeSets.size());
-
- JPADriftChangeSet newChangeSet = changeSets.get(0);
- Set<JPADrift> expectedDrifts = new HashSet<JPADrift>(asList(drift1,
drift2));
- Set<JPADrift> actualDrifts = newChangeSet.getDrifts();
-
- assertCollectionMatchesNoOrder("The change set drifts were not copied
correctly", expectedDrifts, actualDrifts,
- "changeSet", "newDriftFile");
- }
-
- private DriftFileDTO toDTo(JPADriftFile driftFile) {
- DriftFileDTO dto = new DriftFileDTO();
- dto.setHashId(driftFile.getHashId());
- dto.setDataSize(driftFile.getDataSize());
- dto.setStatus(driftFile.getStatus());
- return dto;
- }
-
-
- private void assertDriftFilePersisted(JPADriftFile driftFile, String name, String
content) {
- assertNotNull("Failed to get " + name + " Was it persisted?",
driftFile);
- assertEquals("The content for " + name + " is wrong",
content, jpaDriftServer.getDriftFileBits(
- driftFile.getHashId()));
- assertEquals("The drift file status is wrong", LOADED,
driftFile.getStatus());
- }
-
-}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
deleted file mode 100644
index 1353293..0000000
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/ManageDriftDefinitionsTest.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2011 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.drift;
-
-import static java.util.Arrays.asList;
-import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
-import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.normal;
-import static
org.rhq.core.domain.drift.DriftDefinitionComparator.CompareMode.BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS;
-import static org.rhq.enterprise.server.util.LookupUtil.getDriftManager;
-import static org.rhq.enterprise.server.util.LookupUtil.getDriftTemplateManager;
-import static org.rhq.test.AssertUtils.assertCollectionMatchesNoOrder;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import javax.persistence.EntityManager;
-
-import org.testng.annotations.BeforeClass;
-
-import org.rhq.core.domain.common.EntityContext;
-import org.rhq.core.domain.configuration.Configuration;
-import org.rhq.core.domain.criteria.DriftDefinitionCriteria;
-import org.rhq.core.domain.criteria.JPADriftChangeSetCriteria;
-import org.rhq.core.domain.drift.Drift;
-import org.rhq.core.domain.drift.DriftChangeSet;
-import org.rhq.core.domain.drift.DriftConfigurationDefinition;
-import org.rhq.core.domain.drift.DriftDefinition;
-import org.rhq.core.domain.drift.DriftDefinitionComparator;
-import org.rhq.core.domain.drift.DriftDefinitionTemplate;
-import org.rhq.core.domain.drift.DriftSnapshot;
-import org.rhq.core.domain.drift.JPADrift;
-import org.rhq.core.domain.drift.JPADriftChangeSet;
-import org.rhq.core.domain.drift.JPADriftFile;
-import org.rhq.core.domain.drift.JPADriftSet;
-import org.rhq.core.domain.util.PageList;
-import org.rhq.enterprise.server.safeinvoker.HibernateDetachUtility;
-import org.rhq.test.TransactionCallback;
-
-public class ManageDriftDefinitionsTest extends DriftServerTest {
-
- private DriftManagerLocal driftMgr;
-
- private DriftTemplateManagerLocal templateMgr;
-
- @BeforeClass
- public void initClass() throws Exception {
- driftMgr = getDriftManager();
- templateMgr = getDriftTemplateManager();
- }
-
- public void createDefinitionFromUnpinnedTemplate() {
- // first create a template
- final DriftDefinition templateDef = new DriftDefinition(new Configuration());
- templateDef.setName("test_createUnpinnedDefinition");
- templateDef.setEnabled(true);
- templateDef.setDriftHandlingMode(normal);
- templateDef.setInterval(2400L);
- templateDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
-
- // persist the template
- DriftDefinitionTemplate template = templateMgr.createTemplate(getOverlord(),
resourceType.getId(), false,
- templateDef);
-
- // create and persist the definition
- DriftDefinition definition = template.createDefinition();
- definition.setTemplate(template);
- driftMgr.updateDriftDefinition(getOverlord(),
EntityContext.forResource(resource.getId()), definition);
-
- // verify that the definition was created
- DriftDefinition newDef = loadDefinition(definition.getName());
- DriftDefinitionComparator comparator = new DriftDefinitionComparator(
- BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS);
-
- assertEquals("The drift definition was not persisted correctly", 0,
comparator.compare(definition, newDef));
- assertEquals("The template association was not set on the definition",
template, newDef.getTemplate());
- }
-
- @SuppressWarnings("unchecked")
- public void createDefinitionFromPinnedTemplate() throws Exception {
- // We first need to create a pinned template. Users can only create a pinned
- // template from a snapshot of an existing resource-level drift definition.
- // We are going to take a bit of a short cut though by directly creating
- // and persisting the pinned change set.
-
- // first create the change set
- final JPADriftChangeSet changeSet0 = new JPADriftChangeSet(null, 0, COVERAGE,
null);
-
changeSet0.setDriftHandlingMode(DriftConfigurationDefinition.DriftHandlingMode.normal);
-
- final JPADriftFile driftFile1 = new JPADriftFile("a1b2c3");
- final JPADriftFile driftFile2 = new JPADriftFile("1a2b3c");
-
- JPADrift drift1 = new JPADrift(changeSet0, "drift.1", FILE_ADDED, null,
driftFile1);
- JPADrift drift2 = new JPADrift(changeSet0, "drift.2", FILE_ADDED, null,
driftFile2);
-
- final JPADriftSet driftSet = new JPADriftSet();
- driftSet.addDrift(drift1);
- driftSet.addDrift(drift2);
-
- // create the template
- final DriftDefinition templateDef = new DriftDefinition(new Configuration());
- templateDef.setName("test_createUnpinnedDefinition");
- templateDef.setEnabled(true);
- templateDef.setDriftHandlingMode(normal);
- templateDef.setInterval(2400L);
- templateDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
- templateDef.setPinned(true);
-
- final DriftDefinitionTemplate template =
templateMgr.createTemplate(getOverlord(), resourceType.getId(), true,
- templateDef);
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
-
- em.persist(driftFile1);
- em.persist(driftFile2);
- em.persist(changeSet0);
- em.persist(driftSet);
- changeSet0.setInitialDriftSet(driftSet);
- em.merge(changeSet0);
-
- // setting the change set id on the template is the last and the
- // most important step in making the template pinned
- template.setChangeSetId(changeSet0.getId());
- em.merge(template);
- }
- });
-
- // Create and persist a resource-level definition.
- final DriftDefinition definition = template.createDefinition();
- definition.setTemplate(template);
-
- final AtomicBoolean agentInvoked = new AtomicBoolean(false);
-
- agentServiceContainer.driftService = new TestDefService() {
- @Override
- public void updateDriftDetection(int resourceId, DriftDefinition driftDef,
DriftSnapshot snapshot) {
- try {
- HibernateDetachUtility.nullOutUninitializedFields(driftDef,
- HibernateDetachUtility.SerializationType.SERIALIZATION);
- HibernateDetachUtility.nullOutUninitializedFields(snapshot,
- HibernateDetachUtility.SerializationType.SERIALIZATION);
- agentInvoked.set(true);
- assertNotNull("Expected snapshot drift instances collection to
be non-null",
- snapshot.getDriftInstances());
- assertEquals("Expected snapshot to contain two drift
entries", 2, snapshot.getDriftInstances().size());
- } catch (Exception e) {
- String msg = "Do not pass attached entites to agent since those
entities are outside of " +
- "Hibernate's control. The persistence context should be
flushed and cleared to ensure that " +
- "only detached objects are sent to the agent";
- throw new RuntimeException(msg, e);
- }
- }
- };
-
- driftMgr.updateDriftDefinition(getOverlord(),
EntityContext.forResource(resource.getId()), definition);
-
- DriftDefinition newDef = loadDefinition(definition.getName());
-
- // verify that the definition is marked as pinned
- assertTrue("The drift definition should be marked as pinned",
newDef.isPinned());
-
- // verify that the initial change set is generated for the definition
- JPADriftChangeSetCriteria criteria = new JPADriftChangeSetCriteria();
- criteria.addFilterDriftDefinitionId(definition.getId());
- criteria.addFilterCategory(COVERAGE);
- criteria.fetchDrifts(true);
-
- PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
- criteria);
- assertEquals("Expected to find one change set", 1, changeSets.size());
-
- JPADriftChangeSet expectedChangeSet = new JPADriftChangeSet(resource, 1,
COVERAGE, null);
- List<? extends Drift> expectedDrifts = asList(
- new JPADrift(expectedChangeSet, drift1.getPath(), FILE_ADDED, null,
driftFile1),
- new JPADrift(expectedChangeSet, drift2.getPath(), FILE_ADDED, null,
driftFile2));
-
- DriftChangeSet<?> actualChangeSet = changeSets.get(0);
- List<? extends Drift> actualDrifts = new
ArrayList(actualChangeSet.getDrifts());
-
- assertCollectionMatchesNoOrder("Expected to find drifts from change sets 1
and 2 in the template change set",
- (List<Drift>)expectedDrifts, (List<Drift>)actualDrifts,
"id", "ctime", "changeSet", "newDriftFile");
-
- // lastly verify that the agent is called
- assertTrue("Failed to send drift definition along with snapshot to
agent", agentInvoked.get());
- }
-
- private DriftDefinition loadDefinition(String name) {
- DriftDefinitionCriteria criteria = new DriftDefinitionCriteria();
- criteria.addFilterResourceIds(resource.getId());
- criteria.addFilterName(name);
- criteria.fetchConfiguration(true);
- criteria.fetchResource(true);
- criteria.fetchTemplate(true);
-
- PageList<DriftDefinition> driftDefs =
driftMgr.findDriftDefinitionsByCriteria(getOverlord(), criteria);
- assertEquals("Expected to find one drift definition", 1,
driftDefs.size());
-
- return driftDefs.get(0);
- }
-}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
deleted file mode 100644
index 190df2f..0000000
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/drift/ManageSnapshotsTest.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2011 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.drift;
-
-import static java.util.Arrays.asList;
-import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
-import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
-import static org.rhq.core.domain.drift.DriftChangeSetCategory.DRIFT;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.normal;
-import static org.rhq.enterprise.server.util.LookupUtil.getDriftManager;
-import static org.rhq.enterprise.server.util.LookupUtil.getDriftTemplateManager;
-import static org.rhq.test.AssertUtils.assertCollectionMatchesNoOrder;
-import static org.rhq.test.AssertUtils.assertPropertiesMatch;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import javax.persistence.EntityManager;
-
-import org.testng.annotations.BeforeClass;
-
-import org.rhq.core.domain.configuration.Configuration;
-import org.rhq.core.domain.criteria.GenericDriftChangeSetCriteria;
-import org.rhq.core.domain.drift.Drift;
-import org.rhq.core.domain.drift.DriftChangeSet;
-import org.rhq.core.domain.drift.DriftDefinition;
-import org.rhq.core.domain.drift.DriftSnapshot;
-import org.rhq.core.domain.drift.JPADrift;
-import org.rhq.core.domain.drift.JPADriftChangeSet;
-import org.rhq.core.domain.drift.JPADriftFile;
-import org.rhq.core.domain.drift.JPADriftSet;
-import org.rhq.core.domain.util.PageList;
-import org.rhq.core.server.EntitySerializer;
-import org.rhq.test.TransactionCallback;
-
-public class ManageSnapshotsTest extends DriftServerTest {
-
- private DriftManagerLocal driftMgr;
-
- private DriftTemplateManagerLocal templateMgr;
-
- @BeforeClass(inheritGroups = true)
- public void initClass() throws Exception {
- driftMgr = getDriftManager();
- templateMgr = getDriftTemplateManager();
- }
-
- public void pinningSnapshotShouldSetDriftDefAsPinned() {
- final DriftDefinition driftDef =
createAndPersistDriftDef("test::setPinnedFlag");
-
- // create initial change set
- final JPADriftChangeSet changeSet = new JPADriftChangeSet(resource, 0, COVERAGE,
driftDef);
-
- final JPADriftFile driftFile1 = new JPADriftFile("a1b2c3");
- JPADrift drift = new JPADrift(changeSet, "drift.1", FILE_ADDED, null,
driftFile1);
-
- final JPADriftSet driftSet = new JPADriftSet();
- driftSet.addDrift(drift);
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
- em.persist(driftFile1);
- em.persist(changeSet);
- em.persist(driftSet);
- changeSet.setInitialDriftSet(driftSet);
- em.merge(changeSet);
- }
- });
-
- driftMgr.pinSnapshot(getOverlord(), driftDef.getId(), 0);
- DriftDefinition updatedDriftDef = driftMgr.getDriftDefinition(getOverlord(),
driftDef.getId());
-
- assertNotNull("Failed to get " + toString(driftDef), updatedDriftDef);
- assertTrue("Failed to set pinned flag of " + toString(driftDef),
updatedDriftDef.isPinned());
- }
-
- @SuppressWarnings("unchecked")
- public void pinningSnapshotShouldMakeSnapshotTheInitialChangeSet() throws Exception
{
- final DriftDefinition driftDef =
createAndPersistDriftDef("test::makeSnapshotVersionZero");
-
- // create initial change set
- final JPADriftChangeSet changeSet0 = new JPADriftChangeSet(resource, 0, COVERAGE,
driftDef);
-
- final JPADriftFile driftFile1 = new JPADriftFile("a1b2c3");
- JPADrift drift1 = new JPADrift(changeSet0, "drift.1", FILE_ADDED, null,
driftFile1);
-
- final JPADriftSet driftSet = new JPADriftSet();
- driftSet.addDrift(drift1);
-
- // create change set v1
- final JPADriftFile driftFile2 = new JPADriftFile("1a2b3c");
- final JPADriftChangeSet changeSet1 = new JPADriftChangeSet(resource, 1, DRIFT,
driftDef);
- final JPADrift drift2 = new JPADrift(changeSet1, "drift.2", FILE_ADDED,
null, driftFile2);
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
- em.persist(driftFile1);
- em.persist(driftFile2);
- em.persist(changeSet0);
- em.persist(driftSet);
- changeSet0.setInitialDriftSet(driftSet);
- em.merge(changeSet0);
- em.persist(changeSet1);
- em.persist(drift2);
- }
- });
-
- driftMgr.pinSnapshot(getOverlord(), driftDef.getId(), 1);
-
- // Verify that there is now only one change set for the drift def
- GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
- criteria.addFilterDriftDefinitionId(driftDef.getId());
-
- PageList<? extends DriftChangeSet<?>> changeSets =
driftMgr.findDriftChangeSetsByCriteria(getOverlord(),
- criteria);
- assertEquals("All change sets except the change set representing the pinned
snapshot should be removed",
- 1, changeSets.size());
- DriftChangeSet<?> changeSet = changeSets.get(0);
-
- assertEquals("The pinned snapshot version should be reset to zero", 0,
changeSet.getVersion());
- assertEquals("The change set category is wrong", COVERAGE,
changeSet.getCategory());
-
- JPADriftChangeSet expectedChangeSet = new JPADriftChangeSet(resource, 1,
COVERAGE, driftDef);
- List<? extends Drift> expectedDrifts = asList(
- new JPADrift(expectedChangeSet, drift1.getPath(), FILE_ADDED, null,
driftFile1),
- new JPADrift(expectedChangeSet, drift2.getPath(), FILE_ADDED, null,
driftFile2));
-
- List<? extends Drift> actualDrifts = new ArrayList(changeSet.getDrifts());
-
- assertCollectionMatchesNoOrder("Expected to find drifts from change sets 1
and 2 in the new initial change set",
- (List<Drift>)expectedDrifts, (List<Drift>)actualDrifts,
"id", "ctime", "changeSet", "newDriftFile");
-
- // we need to compare the newDriftFile properties separately because
- // assertCollectionMatchesNoOrder compares properties via equals() and
JPADriftFile
- // does not implement equals.
- assertPropertiesMatch(drift1.getNewDriftFile(), findDriftByPath(actualDrifts,
"drift.1").getNewDriftFile(),
- "The newDriftFile property was not set correctly for " + drift1);
- assertPropertiesMatch(drift2.getNewDriftFile(), findDriftByPath(actualDrifts,
"drift.2").getNewDriftFile(),
- "The newDriftFile property was not set correctly for " + drift1);
- }
-
- public void pinningSnapshotShouldSendRequestToAgent() {
- final DriftDefinition driftDef =
createAndPersistDriftDef("test::setPinnedFlag");
-
- // create initial change set
- final JPADriftChangeSet changeSet = new JPADriftChangeSet(resource, 0, COVERAGE,
driftDef);
-
- final JPADriftFile driftFile1 = new JPADriftFile("a1b2c3");
- JPADrift drift = new JPADrift(changeSet, "drift.1", FILE_ADDED, null,
driftFile1);
-
- final JPADriftSet driftSet = new JPADriftSet();
- driftSet.addDrift(drift);
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- EntityManager em = getEntityManager();
- em.persist(driftFile1);
- em.persist(changeSet);
- em.persist(driftSet);
- changeSet.setInitialDriftSet(driftSet);
- em.merge(changeSet);
- }
- });
-
- final AtomicBoolean agentInvoked = new AtomicBoolean(false);
- agentServiceContainer.driftService = new TestDefService() {
- @Override
- public void pinSnapshot(int resourceId, String configName, DriftSnapshot
snapshot) {
- try {
- agentInvoked.set(true);
- // serialize the method arguments here to more closely simulate what
- // happens during the call. We cannot send hibernate-proxied objects
- // to the agent. This is an attempt to catch that.
- ObjectOutputStream stream = new ObjectOutputStream(new
ByteArrayOutputStream());
- EntitySerializer.writeExternalRemote(resourceId, stream);
- EntitySerializer.writeExternalRemote(configName, stream);
- EntitySerializer.writeExternalRemote(snapshot, stream);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
- };
-
- driftMgr.pinSnapshot(getOverlord(), driftDef.getId(), 0);
-
- assertTrue("Failed to send request to agent to pin snapshot",
agentInvoked.get());
- }
-
- private DriftDefinition createAndPersistDriftDef(String name) {
- final DriftDefinition driftDef = new DriftDefinition(new Configuration());
- driftDef.setName(name);
- driftDef.setEnabled(true);
- driftDef.setDriftHandlingMode(normal);
- driftDef.setInterval(1800L);
- driftDef.setBasedir(new DriftDefinition.BaseDirectory(fileSystem,
"/foo/bar/test"));
-
- executeInTransaction(new TransactionCallback() {
- @Override
- public void execute() throws Exception {
- driftDef.setResource(resource);
- getEntityManager().persist(driftDef);
- }
- });
-
- return driftDef;
- }
-
-}
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 d84fa88..45bda40 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
@@ -18,6 +18,10 @@
*/
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.sql.Connection;
import java.sql.SQLException;
import java.util.Hashtable;
@@ -59,10 +63,6 @@ import org.rhq.enterprise.server.util.LookupUtil;
import org.rhq.test.JPAUtils;
import org.rhq.test.TransactionCallback;
-import static org.rhq.test.JPAUtils.clearDB;
-import static org.rhq.test.JPAUtils.lookupEntityManager;
-import static org.rhq.test.JPAUtils.lookupTransactionManager;
-
/**
* This is the abstract test base for server jar tests.
*
@@ -91,6 +91,13 @@ public abstract class AbstractEJB3Test extends AssertJUnit {
//@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"));
diff --git a/modules/enterprise/server/pom.xml b/modules/enterprise/server/pom.xml
index d71e1b5..08b43b1 100644
--- a/modules/enterprise/server/pom.xml
+++ b/modules/enterprise/server/pom.xml
@@ -40,6 +40,7 @@
<module>ear</module>
<module>safe-invoker</module>
<module>client-api</module>
+ <module>integration-tests</module>
</modules>
</profile>
@@ -57,6 +58,23 @@
</modules>
</profile>
+ <profile>
+ <id>integration-tests</id>
+ <activation>
+ <property>
+ <name>rhq.itests</name>
+ </property>
+ </activation>
+ <modules>
+ <module>xml-schemas</module>
+ <module>jar</module>
+ <module>sars</module>
+ <module>plugins</module>
+ <module>client-api</module>
+ <module>integration-tests</module>
+ </modules>
+ </profile>
+
</profiles>
</project>