SCOUT-95
Add an AOP-based test for the AuthToken cache, fix up the DELETE_ASSOCIATION
case. Bring in aspectj into the build so that we can build the AOP test.
The new AOP-based tests can be enabled by :
mvn -Dtestcache=true clean install
git-svn-id: https://svn.apache.org/repos/asf/webservices/scout/trunk@954977 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pom.xml b/pom.xml
index d4791b9..b5282de 100644
--- a/pom.xml
+++ b/pom.xml
@@ -269,10 +269,35 @@
<version>1.2.13</version>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.aspectj</groupId>
+ <artifactId>aspectjrt</artifactId>
+ <version>1.6.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>aspectj</groupId>
+ <artifactId>aspectjweaver</artifactId>
+ <version>1.5.2</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
<pluginManagement>
- <plugins>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>aspectj-maven-plugin</artifactId>
+ <version>1.3</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>test-compile</goal> <!-- use this goal to weave all your test classes -->
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
@@ -378,11 +403,31 @@
</dependency>
</dependencies>
</plugin>
-
</plugins>
</build>
</profile>
-
+ <profile>
+ <id>testcache</id>
+ <activation>
+ <activeByDefault>false</activeByDefault>
+ <property>
+ <name>testcache</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <forkMode>pertest</forkMode>
+ <argLine>-javaagent:${settings.localRepository}/aspectj/aspectjweaver/1.5.2/aspectjweaver-1.5.2.jar</argLine>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
</profiles>
<reporting>
diff --git a/src/main/java/org/apache/ws/scout/registry/BusinessLifeCycleManagerImpl.java b/src/main/java/org/apache/ws/scout/registry/BusinessLifeCycleManagerImpl.java
index 6e55f25..1fb4987 100644
--- a/src/main/java/org/apache/ws/scout/registry/BusinessLifeCycleManagerImpl.java
+++ b/src/main/java/org/apache/ws/scout/registry/BusinessLifeCycleManagerImpl.java
@@ -643,7 +643,7 @@
token = getAuthToken(connection, ireg);
clearPublisherAssertions(token.getAuthInfo(), ireg);
regobj = ireg.deleteBusiness(token.getAuthInfo(), (String[]) dataarray);
- }
+ }
}
else if (op.equalsIgnoreCase("DELETE_SERVICE")) {
try {
@@ -654,7 +654,7 @@
AuthTokenSingleton.deleteAuthToken(username);
}
token = getAuthToken(connection, ireg);
- clearPublisherAssertions(token.getAuthInfo(), ireg);
+ //clearPublisherAssertions(token.getAuthInfo(), ireg);
regobj = ireg.deleteService(token.getAuthInfo(), (String[]) dataarray);
}
}
@@ -667,7 +667,7 @@
AuthTokenSingleton.deleteAuthToken(username);
}
token = getAuthToken(connection, ireg);
- clearPublisherAssertions(token.getAuthInfo(), ireg);
+ //clearPublisherAssertions(token.getAuthInfo(), ireg);
regobj = ireg.deleteBinding(token.getAuthInfo(), (String[]) dataarray);
}
}
@@ -685,7 +685,7 @@
}
}
else if (op.equalsIgnoreCase("DELETE_ASSOCIATION")) {
- int len = ((String[]) dataarray).length;
+ int len = ((String[]) dataarray).length;
PublisherAssertion[] paarr = new PublisherAssertion[len];
for(int i=0;i<len;i++)
{
@@ -705,7 +705,17 @@
}
}
else if (op.equalsIgnoreCase("DELETE_CLASSIFICATIONSCHEME")) {
- regobj = ireg.deleteTModel(token.getAuthInfo(), (String[]) dataarray);
+ try {
+ regobj = ireg.deleteTModel(token.getAuthInfo(), (String[]) dataarray);
+ } catch (RegistryException rve) {
+ String username = getUsernameFromCredentials(connection.getCredentials());
+ if (AuthTokenSingleton.getToken(username) != null) {
+ AuthTokenSingleton.deleteAuthToken(username);
+ }
+ token = getAuthToken(connection, ireg);
+ clearPublisherAssertions(token.getAuthInfo(), ireg);
+ regobj = ireg.deleteTModel(token.getAuthInfo(), (String[]) dataarray);
+ }
}
else {
throw new JAXRException("Unsupported operation:" + op);
@@ -749,7 +759,17 @@
}
catch (RegistryException e)
{
- throw new RuntimeException(e);
+ ConnectionImpl connection = registry.getConnection();
+ String username = getUsernameFromCredentials(connection.getCredentials());
+ if (AuthTokenSingleton.getToken(username) != null) {
+ AuthTokenSingleton.deleteAuthToken(username);
+ }
+ AuthToken token = null;
+ try {
+ token = getAuthToken(connection, ireg);
+ } catch (JAXRException je) {
+ }
+ clearPublisherAssertions( token.getAuthInfo(), ireg);
}
}
diff --git a/src/main/java/org/apache/ws/scout/registry/BusinessLifeCycleManagerV3Impl.java b/src/main/java/org/apache/ws/scout/registry/BusinessLifeCycleManagerV3Impl.java
index 49d4145..84ed199 100644
--- a/src/main/java/org/apache/ws/scout/registry/BusinessLifeCycleManagerV3Impl.java
+++ b/src/main/java/org/apache/ws/scout/registry/BusinessLifeCycleManagerV3Impl.java
@@ -639,7 +639,7 @@
AuthTokenV3Singleton.deleteAuthToken(username);
}
token = getAuthToken(connection, ireg);
- clearPublisherAssertions(token.getAuthInfo(), ireg);
+ //clearPublisherAssertions(token.getAuthInfo(), ireg);
regobj = ireg.deleteBusiness(token.getAuthInfo(), (String[]) dataarray);
}
}
@@ -652,7 +652,7 @@
AuthTokenV3Singleton.deleteAuthToken(username);
}
token = getAuthToken(connection, ireg);
- clearPublisherAssertions(token.getAuthInfo(), ireg);
+ //clearPublisherAssertions(token.getAuthInfo(), ireg);
regobj = ireg.deleteService(token.getAuthInfo(), (String[]) dataarray);
}
}
@@ -665,7 +665,7 @@
AuthTokenV3Singleton.deleteAuthToken(username);
}
token = getAuthToken(connection, ireg);
- clearPublisherAssertions(token.getAuthInfo(), ireg);
+ //clearPublisherAssertions(token.getAuthInfo(), ireg);
regobj = ireg.deleteBinding(token.getAuthInfo(), (String[]) dataarray);
}
}
@@ -678,7 +678,7 @@
AuthTokenV3Singleton.deleteAuthToken(username);
}
token = getAuthToken(connection, ireg);
- clearPublisherAssertions(token.getAuthInfo(), ireg);
+ //clearPublisherAssertions(token.getAuthInfo(), ireg);
regobj = ireg.deleteTModel(token.getAuthInfo(), (String[]) dataarray);
}
}
@@ -698,7 +698,7 @@
AuthTokenV3Singleton.deleteAuthToken(username);
}
token = getAuthToken(connection, ireg);
- clearPublisherAssertions(token.getAuthInfo(), ireg);
+ //clearPublisherAssertions(token.getAuthInfo(), ireg);
regobj = ireg.deletePublisherAssertions(token.getAuthInfo(), paarr);
}
}
@@ -711,7 +711,7 @@
AuthTokenV3Singleton.deleteAuthToken(username);
}
token = getAuthToken(connection, ireg);
- clearPublisherAssertions(token.getAuthInfo(), ireg);
+ //clearPublisherAssertions(token.getAuthInfo(), ireg);
regobj = ireg.deleteTModel(token.getAuthInfo(), (String[]) dataarray);
}
}
diff --git a/src/test/java/org/apache/ws/scout/registry/qa/BusinessLifeCycleManagerImplReplacement.java b/src/test/java/org/apache/ws/scout/registry/qa/BusinessLifeCycleManagerImplReplacement.java
new file mode 100644
index 0000000..3dd1f37
--- /dev/null
+++ b/src/test/java/org/apache/ws/scout/registry/qa/BusinessLifeCycleManagerImplReplacement.java
@@ -0,0 +1,111 @@
+package org.apache.ws.scout.registry.qa;
+
+import java.net.URL;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.Statement;
+import java.util.Properties;
+
+import org.apache.ws.scout.model.uddi.v2.BusinessDetail;
+import org.apache.ws.scout.model.uddi.v2.BusinessEntity;
+
+import org.apache.ws.scout.model.uddi.v2.PublisherAssertion;
+import org.apache.ws.scout.model.uddi.v2.PublisherAssertions;
+
+import org.aspectj.lang.annotation.After;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+
+@Aspect
+public class BusinessLifeCycleManagerImplReplacement {
+ private static final String JUDDI_PROPERTIES_FILE = "juddi.properties";
+
+ private static final String JDBC_DRIVER = "juddi.jdbcDriver";
+ private static final String JDBC_URL = "juddi.jdbcUrl";
+ private static final String JDBC_USER = "juddi.jdbcUsername";
+ private static final String JDBC_PASSWORD = "juddi.jdbcPassword";
+
+ private Connection conn;
+
+// @Before(" call(org.apache.ws.scout.model.uddi.v2.BusinessDetail saveBusiness(String,org.apache.ws.scout.model.uddi.v2.BusinessEntity[])) "
+// + "&& within(org.apache.ws.scout.registry.BusinessLifeCycleManagerImpl)")
+ @Before(" call(boolean equalsIgnoreCase(String)) "
+ + "&& within(org.apache.ws.scout.registry.BusinessLifeCycleManagerImpl)")
+ public void beforeSaveOrgCall() throws Exception {
+ System.out.println("Clearing the AUTH_TOKEN table...");
+ dbinit();
+ clearAuthTokens();
+ dbclose();
+ }
+
+ public void dbinit () throws Exception {
+ URL url = this.getClass().getClassLoader().getResource(JUDDI_PROPERTIES_FILE);
+ Properties prop = new Properties();
+ prop.load(url.openStream());
+
+ String jdbcURL = System.getProperty(JDBC_URL, prop.getProperty(JDBC_URL));
+ String jdbcDriver = System.getProperty(JDBC_DRIVER, prop.getProperty(JDBC_DRIVER));
+ String jdbcUser = System.getProperty(JDBC_USER, prop.getProperty(JDBC_USER));
+ String jdbcPass = System.getProperty(JDBC_PASSWORD, prop.getProperty(JDBC_PASSWORD));
+
+ Class.forName(jdbcDriver);
+ conn = DriverManager.getConnection(jdbcURL, jdbcUser, jdbcPass);
+ }
+
+ public void dbclose() throws Exception {
+ if (conn != null) {
+ conn.close();
+ conn = null;
+ }
+ }
+
+ public void clearAuthTokens() throws Exception {
+ String delQuery = "delete from AUTH_TOKEN";
+ Statement st = conn.createStatement();
+ st.executeUpdate(delQuery);
+ }
+
+/*
+ @Before(" call(org.apache.ws.scout.model.uddi.v2.ServiceDetail saveService(String,org.apache.ws.scout.model.uddi.v2.BusinessService[]))"
+ + "&& within(org.apache.ws.scout.registry.qa.JAXR065AuthTokenCacheTest)")
+ public void beforeServiceCall() {
+ System.out.println("POINTCUT: deleteAuthTokens");
+ }
+
+ @Before(" call(org.apache.ws.scout.model.uddi.v2.BindingDetail saveBinding(String,org.apache.ws.scout.model.uddi.v2.BindingTemplate[]))"
+ + "&& within(org.apache.ws.scout.registry.qa.JAXR065AuthTokenCacheTest)")
+ public void beforeSaveServiceBindingCall() {
+ System.out.println("POINTCUT: deleteAuthTokens");
+ }
+
+ @Before(" call(org.apache.ws.scout.model.uddi.v2.TModelDetail saveTModel(String,org.apache.ws.scout.model.uddi.v2.TModel[]))"
+ + "&& within(org.apache.ws.scout.registry.qa.JAXR065AuthTokenCacheTest..*)")
+ public void beforeSaveTModelCall() {
+ System.out.println("POINTCUT: deleteAuthTokens");
+ }
+
+ @Before(" call(org.apache.ws.scout.model.uddi.v2.DispositionReport deleteBusiness(String,String[]))"
+ + "&& within(org.apache.ws.scout.registry.qa.JAXR065AuthTokenCacheTest..*)")
+ public void beforeDeleteOrgCall() {
+ System.out.println("POINTCUT: deleteAuthTokens");
+ }
+
+ @Before(" call(org.apache.ws.scout.model.uddi.v2.DispositionReport deleteService(String,String[]))"
+ + "&& within(org.apache.ws.scout.registry.qa.JAXR065AuthTokenCacheTest..*)")
+ public void beforeDeleteServiceCall() {
+ System.out.println("POINTCUT: deleteAuthTokens");
+ }
+
+ @Before(" call(org.apache.ws.scout.model.uddi.v2.DispositionReport deleteTModel(String,String[]))"
+ + "&& within(org.apache.ws.scout.registry.qa.JAXR065AuthTokenCacheTest..*)")
+ public void beforeDeleteTModelCall() {
+ System.out.println("POINTCUT: deleteAuthTokens");
+ }
+
+ @Before(" call(org.apache.ws.scout.model.uddi.v2.DispositionReport deleteBinding(String,String[]))"
+ + "&& within(org.apache.ws.scout.registry.qa.JAXR065AuthTokenCacheTest..*)")
+ public void beforeDeleteServiceBindingCall() {
+ System.out.println("POINTCUT: deleteAuthTokens");
+ }
+ */
+}
\ No newline at end of file
diff --git a/src/test/resources/META-INF/aop.xml b/src/test/resources/META-INF/aop.xml
new file mode 100644
index 0000000..b789acd
--- /dev/null
+++ b/src/test/resources/META-INF/aop.xml
@@ -0,0 +1,5 @@
+<aspectj>
+ <aspects>
+ <aspect name="org.apache.ws.scout.registry.qa.BusinessLifeCycleManagerImplReplacement"/>
+ </aspects>
+</aspectj>