Author: rmannibucau
Date: Sun May  6 17:31:47 2012
New Revision: 1334707

URL: http://svn.apache.org/viewvc?rev=1334707&view=rev
Log:
TOMEE-186 more work about @Server tests. Using shrinkwrap and managing @Archive 
and @Library methods

Added:
    
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Archive.java
    
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Library.java
    
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/LibraryEnhancedTweaker.java
    
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ShrinkWrapEnhancedTweaker.java
    
openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/itest/tomee/LibraryWrappedTest.java
    
openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/itest/tomee/ShrinkWrappedTest.java
Modified:
    openejb/trunk/openejb/arquillian-tomee/pom.xml
    openejb/trunk/openejb/itests/openejb-tomee-itest/pom.xml
    
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ITTomEERunner.java
    
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Server.java
    
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/SimpleTweaker.java
    openejb/trunk/openejb/pom.xml

Modified: openejb/trunk/openejb/arquillian-tomee/pom.xml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian-tomee/pom.xml?rev=1334707&r1=1334706&r2=1334707&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian-tomee/pom.xml (original)
+++ openejb/trunk/openejb/arquillian-tomee/pom.xml Sun May  6 17:31:47 2012
@@ -37,7 +37,6 @@
     <version.openejb>4.0.0-beta-3-SNAPSHOT</version.openejb>
     <version.tomee>1.0.0-beta-3-SNAPSHOT</version.tomee>
     <version.shrinkwrap.descriptor>1.1.0-beta-1</version.shrinkwrap.descriptor>
-    <version.shrinkwrap.shrinkwrap>1.0.0</version.shrinkwrap.shrinkwrap>
   </properties>
 
   <modules>

Modified: openejb/trunk/openejb/itests/openejb-tomee-itest/pom.xml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/pom.xml?rev=1334707&r1=1334706&r2=1334707&view=diff
==============================================================================
--- openejb/trunk/openejb/itests/openejb-tomee-itest/pom.xml (original)
+++ openejb/trunk/openejb/itests/openejb-tomee-itest/pom.xml Sun May  6 
17:31:47 2012
@@ -50,6 +50,22 @@
       <artifactId>junit</artifactId>
       <scope>compile</scope>
     </dependency>
+    <dependency>
+      <groupId>org.jboss.shrinkwrap</groupId>
+      <artifactId>shrinkwrap-api</artifactId>
+      <version>${version.shrinkwrap.shrinkwrap}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.shrinkwrap</groupId>
+      <artifactId>shrinkwrap-impl-base</artifactId>
+      <version>${version.shrinkwrap.shrinkwrap}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>ziplock</artifactId>
+      <version>1.0.0-beta-3-SNAPSHOT</version>
+    </dependency>
+
     <dependency> <!-- just to avoid bad dependency relationship in our build 
-->
       <groupId>org.apache.openejb</groupId>
       <artifactId>apache-tomee</artifactId>

Added: 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Archive.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Archive.java?rev=1334707&view=auto
==============================================================================
--- 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Archive.java
 (added)
+++ 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Archive.java
 Sun May  6 17:31:47 2012
@@ -0,0 +1,14 @@
+package org.apache.openejb.itest.tomee;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Target({ METHOD })
+@Retention(RUNTIME)
+public @interface Archive {
+    String value() default ITTomEERunner.DEFAULT_SERVER; // server name
+}

Modified: 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ITTomEERunner.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ITTomEERunner.java?rev=1334707&r1=1334706&r2=1334707&view=diff
==============================================================================
--- 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ITTomEERunner.java
 (original)
+++ 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ITTomEERunner.java
 Sun May  6 17:31:47 2012
@@ -1,10 +1,13 @@
 package org.apache.openejb.itest.tomee;
 
 import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.openejb.OpenEJBRuntimeException;
 import org.apache.openejb.arquillian.common.Setup;
-import org.apache.openejb.arquillian.common.TomEEConfiguration;
 import org.apache.openejb.config.RemoteServer;
 import org.apache.openejb.loader.Files;
 import org.apache.openejb.loader.IO;
@@ -20,17 +23,19 @@ public class ITTomEERunner extends Block
     public static final String HTTP_PROP_PREFIX = "tomee.it.";
     public static final String HTTP_PROP_SUFFIX = ".http";
 
+    protected static final String DEFAULT_SERVER = "_DEFAULT_";
+
     private static final String WORKING_DIR = 
System.getProperty(TOMEE_TEST_IT_WORKING_DIR, "target/it-working-dir");
     private static final String OPENEJB_HOME = "openejb.home";
     private static final String SERVER_SHUTDOWN_PORT = "server.shutdown.port";
 
-    private final List<ServerInfo> servers;
+    private final Map<String, ServerInfo> servers;
     private final RemoteServer[] remoteServers;
 
     public ITTomEERunner(final Class<?> klass) throws InitializationError {
         super(klass);
 
-        servers = new ArrayList<ServerInfo>();
+        servers = new HashMap<String, ServerInfo>();
 
         final Servers serversAnnotation = klass.getAnnotation(Servers.class);
         if (serversAnnotation != null) {
@@ -45,6 +50,53 @@ public class ITTomEERunner extends Block
         }
 
         remoteServers = new RemoteServer[servers.size()];
+
+        for (Method method : klass.getMethods()) {
+            if (isProducerMethod(method)) {
+                {
+                    final Archive webapp = method.getAnnotation(Archive.class);
+                    if (webapp != null && 
org.jboss.shrinkwrap.api.Archive.class.isAssignableFrom(method.getReturnType()))
 {
+                        final String server = webapp.value();
+                        final ServerInfo info = servers.get(server);
+                        if (info == null) {
+                            throw new OpenEJBRuntimeException("can't find 
server '" + server + "'");
+                        }
+
+                        final org.jboss.shrinkwrap.api.Archive<?> archive;
+                        try {
+                            archive = (org.jboss.shrinkwrap.api.Archive<?>) 
method.invoke(null);
+                        } catch (Exception e) {
+                            throw new OpenEJBRuntimeException("can't create 
archive from '" + method.toGenericString() + "'", e);
+                        }
+                        info.tweaker = new 
ShrinkWrapEnhancedTweaker(info.tweaker, archive);
+                    }
+                }
+
+                {
+                    final Library library = 
method.getAnnotation(Library.class);
+                    if (library != null && 
File.class.isAssignableFrom(method.getReturnType())) {
+                        final String server = library.value();
+                        final ServerInfo info = servers.get(server);
+                        if (info == null) {
+                            throw new OpenEJBRuntimeException("can't find 
server '" + server + "'");
+                        }
+
+                        final File lib;
+                        try {
+                            lib = (File) method.invoke(null);
+                        } catch (Exception e) {
+                            throw new OpenEJBRuntimeException("can't create 
archive from '" + method.toGenericString() + "'", e);
+                        }
+                        info.tweaker = new 
LibraryEnhancedTweaker(info.tweaker, lib);
+                    }
+                }
+            }
+        }
+    }
+
+    private boolean isProducerMethod(final Method method) {
+        final int modifiers = method.getModifiers();
+        return Modifier.isPublic(modifiers) && Modifier.isStatic(modifiers) && 
method.getParameterTypes().length == 0;
     }
 
     private void addServer(final Server server) throws InitializationError {
@@ -77,7 +129,7 @@ public class ITTomEERunner extends Block
         final Artifact art = server.artifact();
         info.server = Repository.getArtifact(art.groupId(), art.artifactId(), 
art.version(), art.type(), art.classifier());
 
-        servers.add(info);
+        servers.put(info.name, info);
     }
 
     @Override
@@ -103,7 +155,7 @@ public class ITTomEERunner extends Block
             final String oldShutdownPort = 
System.getProperty(SERVER_SHUTDOWN_PORT);
 
             int i = 0;
-            for (ServerInfo info : servers) {
+            for (ServerInfo info : servers.values()) {
                 final File tomee = new File(WORKING_DIR, info.name);
                 Files.mkdirs(tomee);
                 Zips.unzip(info.server, tomee, true);

Added: 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Library.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Library.java?rev=1334707&view=auto
==============================================================================
--- 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Library.java
 (added)
+++ 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Library.java
 Sun May  6 17:31:47 2012
@@ -0,0 +1,13 @@
+package org.apache.openejb.itest.tomee;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Target({ METHOD })
+@Retention(RUNTIME)
+public @interface Library {
+    String value() default ITTomEERunner.DEFAULT_SERVER; // server name
+}

Added: 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/LibraryEnhancedTweaker.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/LibraryEnhancedTweaker.java?rev=1334707&view=auto
==============================================================================
--- 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/LibraryEnhancedTweaker.java
 (added)
+++ 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/LibraryEnhancedTweaker.java
 Sun May  6 17:31:47 2012
@@ -0,0 +1,19 @@
+package org.apache.openejb.itest.tomee;
+
+import java.io.File;
+
+public class LibraryEnhancedTweaker extends SimpleTweaker {
+    private final ServerTweaker enhanced;
+    private final File lib;
+
+    public LibraryEnhancedTweaker(final ServerTweaker tweaker, final File lib) 
{
+        this.enhanced = tweaker;
+        this.lib = lib;
+    }
+
+    @Override
+    public void tweak(final File home) {
+        enhanced.tweak(home);
+        addLib(home, lib);
+    }
+}

Modified: 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Server.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Server.java?rev=1334707&r1=1334706&r2=1334707&view=diff
==============================================================================
--- 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Server.java
 (original)
+++ 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Server.java
 Sun May  6 17:31:47 2012
@@ -9,7 +9,7 @@ import static java.lang.annotation.Reten
 @Target({ TYPE })
 @Retention(RUNTIME)
 public @interface Server {
-    String name() default ""; // name
+    String name() default ITTomEERunner.DEFAULT_SERVER; // name
     String configurationDir() default "";
     int http() default -1;
     int shutdown() default -1;

Added: 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ShrinkWrapEnhancedTweaker.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ShrinkWrapEnhancedTweaker.java?rev=1334707&view=auto
==============================================================================
--- 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ShrinkWrapEnhancedTweaker.java
 (added)
+++ 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ShrinkWrapEnhancedTweaker.java
 Sun May  6 17:31:47 2012
@@ -0,0 +1,32 @@
+package org.apache.openejb.itest.tomee;
+
+import org.apache.openejb.arquillian.common.Files;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.exporter.ZipExporter;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+
+import java.io.File;
+
+public class ShrinkWrapEnhancedTweaker extends SimpleTweaker {
+    private final ServerTweaker decorated;
+    private final Archive<?> archive;
+
+    public ShrinkWrapEnhancedTweaker(final ServerTweaker tweaker, final 
Archive<?> archive) {
+        this.decorated = tweaker;
+        this.archive = archive;
+    }
+
+    @Override
+    public void tweak(final File home) {
+        decorated.tweak(home);
+
+        final File dump;
+        if (archive instanceof WebArchive) {
+            dump = webApp(home, archive.getName());
+        } else {
+            dump = archive(home, archive.getName());
+        }
+        Files.mkdir(dump.getParentFile());
+        archive.as(ZipExporter.class).exportTo(dump);
+    }
+}

Modified: 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/SimpleTweaker.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/SimpleTweaker.java?rev=1334707&r1=1334706&r2=1334707&view=diff
==============================================================================
--- 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/SimpleTweaker.java
 (original)
+++ 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/SimpleTweaker.java
 Sun May  6 17:31:47 2012
@@ -25,7 +25,19 @@ public class SimpleTweaker implements Se
     }
 
     protected void addWebapp(final File home, final File war) {
-        copy(war, new File(home, "webapps/" + war.getName()));
+        copy(war, webApp(home, war.getName()));
+    }
+
+    protected void addArchive(final File home, final File war) {
+        copy(war, archive(home, war.getName()));
+    }
+
+    protected File webApp(final File home, final String name) {
+        return new File(home, "webapps/" + name);
+    }
+
+    protected File archive(final File home, final String name) {
+        return new File(home, "apps/" + name);
     }
 
     protected File findJar(final String groupId, final String artifactId, 
final String version) {

Added: 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/itest/tomee/LibraryWrappedTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/itest/tomee/LibraryWrappedTest.java?rev=1334707&view=auto
==============================================================================
--- 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/itest/tomee/LibraryWrappedTest.java
 (added)
+++ 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/itest/tomee/LibraryWrappedTest.java
 Sun May  6 17:31:47 2012
@@ -0,0 +1,24 @@
+package org.apache.openejb.itest.tomee;
+
+import org.apache.ziplock.JarLocation;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.File;
+
+import static org.junit.Assert.assertTrue;
+
+@RunWith(ITTomEERunner.class)
+@Server(name = "server")
+public class LibraryWrappedTest {
+    @Library("server")
+    public static File lib() {
+        return JarLocation.jarLocation(ShrinkWrap.class);
+    }
+
+    @Test
+    public void checkSWWasAddedToTheContainer() {
+        assertTrue(new 
File("target/it-working-dir/server/lib/shrinkwrap-api-1.0.0.jar").exists());
+    }
+}

Added: 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/itest/tomee/ShrinkWrappedTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/itest/tomee/ShrinkWrappedTest.java?rev=1334707&view=auto
==============================================================================
--- 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/itest/tomee/ShrinkWrappedTest.java
 (added)
+++ 
openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/itest/tomee/ShrinkWrappedTest.java
 Sun May  6 17:31:47 2012
@@ -0,0 +1,43 @@
+package org.apache.openejb.itest.tomee;
+
+import org.apache.openejb.loader.IO;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.IOException;
+import java.net.URL;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.matchers.JUnitMatchers.containsString;
+
+@Servers({
+        @Server(name = "tomee1"),
+        @Server(name = "tomee2")
+})
+@RunWith(ITTomEERunner.class)
+public class ShrinkWrappedTest {
+    @Archive("tomee1")
+    public static WebArchive war1() {
+        return ShrinkWrap.create(WebArchive.class, 
"test.war").addAsWebResource(new StringAsset("tomee1"), "index.html");
+    }
+
+    @Archive("tomee2")
+    public static WebArchive war2() {
+        return ShrinkWrap.create(WebArchive.class, 
"test.war").addAsWebResource(new StringAsset("tomee2"), "index.html");
+    }
+
+    @Test
+    public void check() throws IOException {
+        for (int i = 1; i <= 2; i++) {
+            final URL url = new URL("http://localhost:"; + 
System.getProperty("tomee.it.tomee" + i + ".http") + "/test");
+            final String str = IO.slurp(url);
+
+            assertNotNull(str);
+            assertThat(str, containsString("tomee" + i));
+        }
+    }
+}

Modified: openejb/trunk/openejb/pom.xml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/pom.xml?rev=1334707&r1=1334706&r2=1334707&view=diff
==============================================================================
--- openejb/trunk/openejb/pom.xml (original)
+++ openejb/trunk/openejb/pom.xml Sun May  6 17:31:47 2012
@@ -166,6 +166,9 @@
     <commons-lang.version>2.6</commons-lang.version>
     <commons-io.version>1.4</commons-io.version>
     <commons-net.version>3.1</commons-net.version>
+
+    <!-- arquillian/shrinkwrap versions used across multiple parents -->
+    <version.shrinkwrap.shrinkwrap>1.0.0</version.shrinkwrap.shrinkwrap>
   </properties>
 
   <build>


Reply via email to