Skip to content
This repository has been archived by the owner on Nov 19, 2018. It is now read-only.

Commit

Permalink
Fix issues :
Browse files Browse the repository at this point in the history
- #4 Validate configuration
- #5 Remove url from cloudbees-api.properties
- #6 Choose properties file for the personal data
  • Loading branch information
hasalex committed Dec 31, 2011
1 parent e24c40c commit 7d940d5
Show file tree
Hide file tree
Showing 9 changed files with 103 additions and 65 deletions.
2 changes: 1 addition & 1 deletion README
Expand Up @@ -24,7 +24,7 @@ It does not work with a simple @EJB
The EJB enricher does not work because the JNDI names in Cloudbees are not compliant with Arquillian's lookup. The EJB enricher does not work because the JNDI names in Cloudbees are not compliant with Arquillian's lookup.


EAR deployment is not supported yet. EAR deployment is not supported yet.

Servlet URL injection is not supported yet.


Restrictions Restrictions
============ ============
Expand Down
Expand Up @@ -18,17 +18,18 @@
*/ */
public class CloudbeesClient { public class CloudbeesClient {



private BeesClient client; private BeesClient client;


CloudbeesClient() { CloudbeesClient(CloudbeesConfiguration configuration) {
try { try {
Properties properties = new Properties(); Properties properties = new Properties();
properties.load(new FileReader(System.getProperty("user.home") + "/.cloudbees/cloudbees-api.properties")); properties.load(new FileReader(configuration.getPropertiesFile()));


client = new BeesClient(properties.getProperty("url"), client = new BeesClient(configuration.getApiUrl(),
properties.getProperty("key"), properties.getProperty("key"),
properties.getProperty("secret"), properties.getProperty("secret"),
"xml", "1.0"); "xml", "1.0");
client.setVerbose(false); client.setVerbose(false);
} catch (IOException ex) { } catch (IOException ex) {
throw new RuntimeException("Fichier properties non trouvé", ex); throw new RuntimeException("Fichier properties non trouvé", ex);
Expand Down

This file was deleted.

Expand Up @@ -2,6 +2,7 @@


import org.jboss.arquillian.container.spi.ConfigurationException; import org.jboss.arquillian.container.spi.ConfigurationException;
import org.jboss.arquillian.container.spi.client.container.ContainerConfiguration; import org.jboss.arquillian.container.spi.client.container.ContainerConfiguration;
import org.jboss.arquillian.container.spi.client.deployment.Validate;


/** /**
* @author <a href="mailto:alexis@sewatech.org">Alexis Hassler</a> * @author <a href="mailto:alexis@sewatech.org">Alexis Hassler</a>
Expand All @@ -10,11 +11,15 @@
*/ */
public class CloudbeesConfiguration implements ContainerConfiguration { public class CloudbeesConfiguration implements ContainerConfiguration {


private String account = "sewatech"; private String account;
private String application = "arq-test"; private String application = "arqtest";
private String containerType = "jboss"; private String containerType = "jboss";
private String apiUrl = "https://api.cloudbees.com/api";
private String propertiesFile = System.getProperty("user.home") + "/.cloudbees/cloudbees-api.properties";


public void validate() throws ConfigurationException { public void validate() throws ConfigurationException {
Validate.notNullOrEmpty(account,
"Cloudbees account must be specified, please fill in \"account\" property in Arquillian configuration");


} }


Expand All @@ -34,15 +39,35 @@ public void setApplication(String application) {
this.application = application; this.application = application;
} }


String getContainerType() { public String getContainerType() {
return containerType; return containerType;
} }
public void setContainerType(String containerType) {
this.containerType = containerType;
}

public String getApiUrl() {
return apiUrl;
}

public void setApiUrl(String apiUrl) {
this.apiUrl = apiUrl;
}

public String getPropertiesFile() {
return propertiesFile;
}

public void setPropertiesFile(String propertiesFile) {
this.propertiesFile = propertiesFile;
}


String getAppId() { String getAppId() {
return getAccount() + "/" +getApplication(); return getAccount() + "/" +getApplication();
} }
String getHostName() { String getHostName() {
return getApplication() + "." + getAccount() + ".cloudbees.net"; return getApplication() + "." + getAccount() + ".cloudbees.net";
} }



} }
@@ -1,9 +1,5 @@
package org.jboss.arquillian.container.cloudbees; package org.jboss.arquillian.container.cloudbees;


import com.cloudbees.api.ApplicationDeployArchiveResponse;
import com.cloudbees.api.BeesClient;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger; import java.util.logging.Logger;


import org.jboss.arquillian.container.spi.client.container.DeployableContainer; import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
Expand Down Expand Up @@ -37,7 +33,7 @@ public class CloudbeesContainer implements DeployableContainer<CloudbeesConfigur


private static final Logger log = Logger.getLogger(CloudbeesContainer.class.getName()); private static final Logger log = Logger.getLogger(CloudbeesContainer.class.getName());
@Inject @ContainerScoped @Inject @ContainerScoped
private InstanceProducer<CloudbeesConfiguration> configuration; private InstanceProducer<CloudbeesConfiguration> configurationProducer;
@Inject @Inject
private Instance<ServiceLoader> serviceLoader; private Instance<ServiceLoader> serviceLoader;


Expand All @@ -55,14 +51,14 @@ public Class<CloudbeesConfiguration> getConfigurationClass() {


@Override @Override
public void setup(CloudbeesConfiguration configuration) { public void setup(CloudbeesConfiguration configuration) {
this.configuration.set(configuration); this.configurationProducer.set(configuration);
} }


@Override @Override
public void start() throws LifecycleException { public void start() throws LifecycleException {
log.info("Start"); log.info("Start");
CloudbeesConfiguration conf = configuration.get(); CloudbeesConfiguration configuration = configurationProducer.get();
cloudbees = new CloudbeesClient(); cloudbees = new CloudbeesClient(configuration);
} }


@Override @Override
Expand All @@ -84,16 +80,16 @@ public void undeploy(Descriptor descriptor) throws DeploymentException {
public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException { public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException {
log.info("Deploy archive of type " + archive.getClass().getSimpleName()); log.info("Deploy archive of type " + archive.getClass().getSimpleName());
Validate.notNull(archive, "Archive must not be null"); Validate.notNull(archive, "Archive must not be null");
CloudbeesConfiguration conf = configuration.get(); CloudbeesConfiguration configuration = configurationProducer.get();


String appId = conf.getAppId(); String appId = configuration.getAppId();
String archivePath = ShrinkWrapUtil.toURL(archive).getPath(); String archivePath = ShrinkWrapUtil.toURL(archive).getPath();
if (archive instanceof WebArchive) { if (archive instanceof WebArchive) {
cloudbees.deployWar(appId, "Test war from Arquillian", archivePath, conf.getContainerType()); cloudbees.deployWar(appId, "Test war from Arquillian", archivePath, configuration.getContainerType());
return buildWarMetadata(conf); return buildWarMetadata(configuration);
} else if (archive instanceof EnterpriseArchive) { } else if (archive instanceof EnterpriseArchive) {
cloudbees.deployEar(appId, "Test ear from Arquillian", archivePath, conf.getContainerType()); cloudbees.deployEar(appId, "Test ear from Arquillian", archivePath, configuration.getContainerType());
return buildEarMetadata(conf); return buildEarMetadata(configuration);
} else { } else {
throw new UnsupportedOperationException("undeploy with descriptor not implemented"); throw new UnsupportedOperationException("undeploy with descriptor not implemented");
} }
Expand All @@ -103,8 +99,8 @@ public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException {
@Override @Override
public void undeploy(Archive<?> archive) throws DeploymentException { public void undeploy(Archive<?> archive) throws DeploymentException {
log.info("Undeploy archive"); log.info("Undeploy archive");
CloudbeesConfiguration conf = configuration.get(); CloudbeesConfiguration configuration = configurationProducer.get();
cloudbees.delete(conf.getAppId()); cloudbees.delete(configuration.getAppId());
} }


private ProtocolMetaData buildWarMetadata(CloudbeesConfiguration conf) { private ProtocolMetaData buildWarMetadata(CloudbeesConfiguration conf) {
Expand All @@ -117,7 +113,7 @@ private ProtocolMetaData buildWarMetadata(CloudbeesConfiguration conf) {
private ProtocolMetaData buildEarMetadata(CloudbeesConfiguration conf) { private ProtocolMetaData buildEarMetadata(CloudbeesConfiguration conf) {
ProtocolMetaData metaData = new ProtocolMetaData(); ProtocolMetaData metaData = new ProtocolMetaData();
HTTPContext context = new HTTPContext(conf.getHostName(), 80); HTTPContext context = new HTTPContext(conf.getHostName(), 80);
context.add(new Servlet(ServletMethodExecutor.ARQUILLIAN_SERVLET_NAME, "test")); context.add(new Servlet(ServletMethodExecutor.ARQUILLIAN_SERVLET_NAME, "test.war"));
metaData.addContext(context); metaData.addContext(context);
return metaData; return metaData;
} }
Expand Down
Expand Up @@ -6,12 +6,14 @@


import javax.ejb.EJB; import javax.ejb.EJB;
import org.jboss.arquillian.container.cloudbees.ejb.EchoService; import org.jboss.arquillian.container.cloudbees.ejb.EchoService;
import org.jboss.arquillian.container.cloudbees.web.Servlet1;
import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.EnterpriseArchive; import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
import org.jboss.shrinkwrap.api.spec.JavaArchive; import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test; import org.junit.Test;
import static org.junit.Assert.*; import static org.junit.Assert.*;
import org.junit.Ignore; import org.junit.Ignore;
Expand All @@ -22,13 +24,15 @@
* @author alexis * @author alexis
*/ */
@RunWith(Arquillian.class) @RunWith(Arquillian.class)
public class CloudbeesEjbEarTest { public class CloudbeesEjbEarTestFail {


@Deployment @Deployment
public static Archive<?> deploy() { public static Archive<?> deploy() {
return ShrinkWrap.create(EnterpriseArchive.class) return ShrinkWrap.create(EnterpriseArchive.class, "xxx.ear")
.addAsModule(ShrinkWrap.create(JavaArchive.class, "test.jar") .addAsModule(ShrinkWrap.create(JavaArchive.class, "test-ejb.jar")
.addClasses(EchoService.class)) .addClasses(EchoService.class))
.addAsModule(ShrinkWrap.create(WebArchive.class, "test-web.war")
.addClasses(Servlet1.class))
.setApplicationXML("application.xml"); .setApplicationXML("application.xml");
} }


Expand All @@ -43,7 +47,7 @@ public void shouldEjbBeInjected() {
assertNotNull("Anonymous bean has not bean injected", bean); assertNotNull("Anonymous bean has not bean injected", bean);
} }


@Test @Test @Ignore // It fails too :-(
public void shouldNamedEjbBeInjected() { public void shouldNamedEjbBeInjected() {
assertNotNull("Named bean has not bean injected", namedBean); assertNotNull("Named bean has not bean injected", namedBean);
} }
Expand Down
@@ -0,0 +1,34 @@
package org.jboss.arquillian.container.cloudbees;

import java.net.URL;
import org.jboss.arquillian.container.cloudbees.web.Servlet1;

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.RunAsClient;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.arquillian.test.api.ArquillianResource;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(Arquillian.class)
public class ServletAsClientWarTest {

@Deployment(testable = false)
public static WebArchive createWarDeployment() throws Exception {
return ShrinkWrap.create(WebArchive.class)
.addClass(Servlet1.class);
}

@Test @RunAsClient
public void shouldRootBeInjected(@ArquillianResource URL baseURL) throws Exception {
assertNotNull("Root URL has not been injected", baseURL);
}

@Test @RunAsClient
public void shouldServletBeInjected(@ArquillianResource(Servlet1.class) URL servletURL) throws Exception {
assertNotNull("Servlet URL has not been injected", servletURL);
}
}
13 changes: 9 additions & 4 deletions src/test/resources/application.xml
Expand Up @@ -3,9 +3,14 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="6" version="6"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd"> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd">
<application-name>test-app</application-name> <application-name>test-app</application-name>


<module> <module>
<ejb>test.jar</ejb> <ejb>test-ejb.jar</ejb>
</module> </module>

<module>
<web>test-web.war</web>
<context-root>web</context-root>
</module>
</application> </application>
2 changes: 2 additions & 0 deletions src/test/resources/arquillian.xml
Expand Up @@ -12,6 +12,8 @@
<property name="account">sewatech</property> <property name="account">sewatech</property>
<property name="application">arqtest0</property> <property name="application">arqtest0</property>
<property name="containerType">jboss</property> <property name="containerType">jboss</property>
<property name="apiUrl">https://api.cloudbees.com/api</property>
<property name="propertiesFile">/Users/alexis/.cloudbees/sewatech.properties</property>
</configuration> </configuration>
</container> </container>


Expand Down

0 comments on commit 7d940d5

Please sign in to comment.