switched aws demo to use s3 and ec2

This commit is contained in:
Adrian Cole 2010-03-20 12:40:52 -07:00
parent 7a4b513191
commit 72da36bf33
9 changed files with 139 additions and 121 deletions

View File

@ -44,26 +44,6 @@
</properties> </properties>
<dependencies> <dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>jclouds-blobstore</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>jclouds-azure</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>jclouds-rackspace</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>jclouds-enterprise</artifactId>
<version>${project.version}</version>
</dependency>
<dependency> <dependency>
<groupId>${project.groupId}</groupId> <groupId>${project.groupId}</groupId>
<artifactId>jclouds-gae</artifactId> <artifactId>jclouds-gae</artifactId>
@ -205,22 +185,6 @@
</goals> </goals>
<configuration> <configuration>
<systemProperties> <systemProperties>
<property>
<name>jclouds.azure.storage.account</name>
<value>${jclouds.azure.storage.account}</value>
</property>
<property>
<name>jclouds.azure.storage.key</name>
<value>${jclouds.azure.storage.key}</value>
</property>
<property>
<name>jclouds.rackspace.user</name>
<value>${jclouds.rackspace.user}</value>
</property>
<property>
<name>jclouds.rackspace.key</name>
<value>${jclouds.rackspace.key}</value>
</property>
<property> <property>
<name>jclouds.aws.accesskeyid</name> <name>jclouds.aws.accesskeyid</name>
<value>${jclouds.aws.accesskeyid}</value> <value>${jclouds.aws.accesskeyid}</value>

View File

@ -33,8 +33,10 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.jclouds.blobstore.BlobStoreContext; import org.jclouds.blobstore.BlobStoreContext;
import org.jclouds.compute.ComputeServiceContext;
import org.jclouds.logging.Logger; import org.jclouds.logging.Logger;
import org.jclouds.samples.googleappengine.functions.BlobStoreContextToContainerResult; import org.jclouds.samples.googleappengine.functions.BlobStoreContextToStatusResult;
import org.jclouds.samples.googleappengine.functions.ComputeServiceContextToStatusResult;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
@ -45,39 +47,48 @@ import com.google.common.collect.Sets;
* @author Adrian Cole * @author Adrian Cole
*/ */
@Singleton @Singleton
public class GetAllContainersController extends HttpServlet { public class GetAllStatusController extends HttpServlet {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private Map<String, BlobStoreContext> contexts; private final Map<String, BlobStoreContext> blobsStoreContexts;
private final BlobStoreContextToContainerResult blobStoreContextToContainerResult; private final Map<String, ComputeServiceContext> computeServiceContexts;
private final BlobStoreContextToStatusResult blobStoreContextToContainerResult;
private final ComputeServiceContextToStatusResult computeServiceContextToContainerResult;
@Resource @Resource
protected Logger logger = Logger.NULL; protected Logger logger = Logger.NULL;
@Inject @Inject
public GetAllContainersController(Map<String, BlobStoreContext> contexts, GetAllStatusController(Map<String, BlobStoreContext> blobsStoreContexts,
BlobStoreContextToContainerResult blobStoreContextToContainerResult) { Map<String, ComputeServiceContext> computeServiceContexts,
this.contexts = contexts; BlobStoreContextToStatusResult blobStoreContextToContainerResult,
ComputeServiceContextToStatusResult computeServiceContextToContainerResult) {
this.blobsStoreContexts = blobsStoreContexts;
this.computeServiceContexts = computeServiceContexts;
this.blobStoreContextToContainerResult = blobStoreContextToContainerResult; this.blobStoreContextToContainerResult = blobStoreContextToContainerResult;
this.computeServiceContextToContainerResult = computeServiceContextToContainerResult;
} }
@Override @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { throws ServletException, IOException {
try { try {
addMyContainersToRequest(request); addStatusResultsToRequest(request);
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher( RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(
"/WEB-INF/jsp/containers.jsp"); "/WEB-INF/jsp/status.jsp");
dispatcher.forward(request, response); dispatcher.forward(request, response);
} catch (Exception e) { } catch (Exception e) {
logger.error(e, "Error listing containers"); logger.error(e, "Error listing status");
throw new ServletException(e); throw new ServletException(e);
} }
} }
private void addMyContainersToRequest(HttpServletRequest request) throws InterruptedException, private void addStatusResultsToRequest(HttpServletRequest request) throws InterruptedException,
ExecutionException, TimeoutException { ExecutionException, TimeoutException {
request.setAttribute("containers", Sets.newTreeSet(Iterables.transform(contexts.keySet(), request.setAttribute("status", Sets
blobStoreContextToContainerResult))); .newTreeSet(Iterables.concat(Iterables.transform(blobsStoreContexts.keySet(),
blobStoreContextToContainerResult), Iterables.transform(
computeServiceContexts.keySet(), computeServiceContextToContainerResult))));
} }
} }

View File

@ -18,26 +18,27 @@
*/ */
package org.jclouds.samples.googleappengine.config; package org.jclouds.samples.googleappengine.config;
import static com.google.common.base.Preconditions.checkNotNull;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextEvent;
import org.jclouds.blobstore.BlobStoreContext; import org.jclouds.blobstore.BlobStoreContext;
import org.jclouds.blobstore.BlobStoreContextBuilder; import org.jclouds.blobstore.BlobStoreContextFactory;
import org.jclouds.compute.ComputeServiceContext;
import org.jclouds.compute.ComputeServiceContextFactory;
import org.jclouds.gae.config.GoogleAppEngineConfigurationModule; import org.jclouds.gae.config.GoogleAppEngineConfigurationModule;
import org.jclouds.samples.googleappengine.GetAllContainersController; import org.jclouds.samples.googleappengine.GetAllStatusController;
import com.google.appengine.repackaged.com.google.common.collect.ImmutableList; import com.google.appengine.repackaged.com.google.common.base.Throwables;
import com.google.common.collect.Maps; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.io.Closeables; import com.google.common.io.Closeables;
import com.google.inject.Guice; import com.google.inject.Guice;
import com.google.inject.Injector; import com.google.inject.Injector;
import com.google.inject.Module;
import com.google.inject.TypeLiteral; import com.google.inject.TypeLiteral;
import com.google.inject.servlet.GuiceServletContextListener; import com.google.inject.servlet.GuiceServletContextListener;
import com.google.inject.servlet.ServletModule; import com.google.inject.servlet.ServletModule;
@ -49,31 +50,23 @@ import com.google.inject.servlet.ServletModule;
*/ */
public class GuiceServletConfig extends GuiceServletContextListener { public class GuiceServletConfig extends GuiceServletContextListener {
public static final String PROPERTY_BLOBSTORE_CONTEXTS = "blobstore.contexts"; private Map<String, BlobStoreContext> blobsStoreContexts;
private Map<String, ComputeServiceContext> computeServiceContexts;
private Map<String, BlobStoreContext> contexts;
@SuppressWarnings("unchecked")
@Override @Override
public void contextInitialized(ServletContextEvent servletContextEvent) { public void contextInitialized(ServletContextEvent servletContextEvent) {
Properties props = loadJCloudsProperties(servletContextEvent); Properties props = loadJCloudsProperties(servletContextEvent);
ImmutableList<String> list = ImmutableList.<String> of(checkNotNull( ImmutableSet<Module> modules = ImmutableSet
props.getProperty(PROPERTY_BLOBSTORE_CONTEXTS), PROPERTY_BLOBSTORE_CONTEXTS).split( .<Module> of(new GoogleAppEngineConfigurationModule());
","));
contexts = Maps.newHashMap();
for (String className : list) {
try { try {
Class<BlobStoreContextBuilder<?, ?>> builderClass; blobsStoreContexts = ImmutableMap.<String, BlobStoreContext> of("s3",
builderClass = (Class<BlobStoreContextBuilder<?, ?>>) Class.forName(className); new BlobStoreContextFactory().createContext("s3", modules, props));
String name = builderClass.getSimpleName().replaceAll("BlobStoreContextBuilder", ""); computeServiceContexts = ImmutableMap.<String, ComputeServiceContext> of("ec2",
Constructor<BlobStoreContextBuilder<?, ?>> constructor = builderClass new ComputeServiceContextFactory().createContext("ec2", modules, props));
.getConstructor(Properties.class); } catch (IOException e) {
contexts.put(name, constructor.newInstance(props).withModules( Throwables.propagate(e);
new GoogleAppEngineConfigurationModule()).buildBlobStoreContext());
} catch (Exception e) {
throw new RuntimeException(e);
}
} }
super.contextInitialized(servletContextEvent); super.contextInitialized(servletContextEvent);
} }
@ -97,8 +90,10 @@ public class GuiceServletConfig extends GuiceServletContextListener {
@Override @Override
protected void configureServlets() { protected void configureServlets() {
bind(new TypeLiteral<Map<String, BlobStoreContext>>() { bind(new TypeLiteral<Map<String, BlobStoreContext>>() {
}).toInstance(GuiceServletConfig.this.contexts); }).toInstance(GuiceServletConfig.this.blobsStoreContexts);
serve("*.blobstore").with(GetAllContainersController.class); bind(new TypeLiteral<Map<String, ComputeServiceContext>>() {
}).toInstance(GuiceServletConfig.this.computeServiceContexts);
serve("*.check").with(GetAllStatusController.class);
requestInjection(this); requestInjection(this);
} }
} }
@ -108,7 +103,10 @@ public class GuiceServletConfig extends GuiceServletContextListener {
@Override @Override
public void contextDestroyed(ServletContextEvent servletContextEvent) { public void contextDestroyed(ServletContextEvent servletContextEvent) {
for (BlobStoreContext context : contexts.values()) { for (BlobStoreContext context : blobsStoreContexts.values()) {
context.close();
}
for (ComputeServiceContext context : computeServiceContexts.values()) {
context.close(); context.close();
} }
super.contextDestroyed(servletContextEvent); super.contextDestroyed(servletContextEvent);

View File

@ -24,7 +24,7 @@ import java.io.Serializable;
* *
* @author Adrian Cole * @author Adrian Cole
*/ */
public class ContainerResult implements Comparable<ContainerResult>, Serializable { public class StatusResult implements Comparable<StatusResult>, Serializable {
/** The serialVersionUID */ /** The serialVersionUID */
private static final long serialVersionUID = -3257496189689220018L; private static final long serialVersionUID = -3257496189689220018L;
private final String service; private final String service;
@ -32,7 +32,7 @@ public class ContainerResult implements Comparable<ContainerResult>, Serializabl
private final String name; private final String name;
private final String status; private final String status;
public ContainerResult(String service, String host, String name, String status) { public StatusResult(String service, String host, String name, String status) {
this.service = service; this.service = service;
this.host = host; this.host = host;
this.name = name; this.name = name;
@ -58,7 +58,7 @@ public class ContainerResult implements Comparable<ContainerResult>, Serializabl
return false; return false;
if (getClass() != obj.getClass()) if (getClass() != obj.getClass())
return false; return false;
ContainerResult other = (ContainerResult) obj; StatusResult other = (StatusResult) obj;
if (host == null) { if (host == null) {
if (other.host != null) if (other.host != null)
return false; return false;
@ -82,7 +82,7 @@ public class ContainerResult implements Comparable<ContainerResult>, Serializabl
return true; return true;
} }
public int compareTo(ContainerResult o) { public int compareTo(StatusResult o) {
return (this == o) ? 0 : getService().compareTo(o.getService()); return (this == o) ? 0 : getService().compareTo(o.getService());
} }

View File

@ -29,7 +29,7 @@ import org.jclouds.blobstore.ContainerNotFoundException;
import org.jclouds.blobstore.domain.StorageMetadata; import org.jclouds.blobstore.domain.StorageMetadata;
import org.jclouds.blobstore.domain.StorageType; import org.jclouds.blobstore.domain.StorageType;
import org.jclouds.logging.Logger; import org.jclouds.logging.Logger;
import org.jclouds.samples.googleappengine.domain.ContainerResult; import org.jclouds.samples.googleappengine.domain.StatusResult;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
@ -37,8 +37,8 @@ import com.google.common.collect.Iterables;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
@Singleton @Singleton
public class BlobStoreContextToContainerResult implements Function<String, ContainerResult> { public class BlobStoreContextToStatusResult implements Function<String, StatusResult> {
private final class BuildContainerResult implements Function<StorageMetadata, ContainerResult> { private final class BuildContainerResult implements Function<StorageMetadata, StatusResult> {
private final String host; private final String host;
private final BlobStoreContext context; private final BlobStoreContext context;
private final String contextName; private final String contextName;
@ -49,7 +49,7 @@ public class BlobStoreContextToContainerResult implements Function<String, Conta
this.contextName = contextName; this.contextName = contextName;
} }
public ContainerResult apply(StorageMetadata from) { public StatusResult apply(StorageMetadata from) {
String status; String status;
try { try {
try { try {
@ -63,7 +63,7 @@ public class BlobStoreContextToContainerResult implements Function<String, Conta
logger.error(e, "Error listing container %s//%s", contextName, from); logger.error(e, "Error listing container %s//%s", contextName, from);
status = (e.getMessage()); status = (e.getMessage());
} }
return new ContainerResult(contextName, host, from.getName(), status); return new StatusResult(contextName, host, from.getName(), status);
} }
} }
@ -73,7 +73,7 @@ public class BlobStoreContextToContainerResult implements Function<String, Conta
@Resource @Resource
protected Logger logger = Logger.NULL; protected Logger logger = Logger.NULL;
public ContainerResult apply(final String contextName) { public StatusResult apply(final String contextName) {
final BlobStoreContext context = contexts.get(contextName); final BlobStoreContext context = contexts.get(contextName);
final String host = context.getProviderSpecificContext().getEndPoint().getHost(); final String host = context.getProviderSpecificContext().getEndPoint().getHost();
try { try {
@ -87,7 +87,7 @@ public class BlobStoreContextToContainerResult implements Function<String, Conta
}))); })));
return new BuildContainerResult(host, context, contextName).apply(md); return new BuildContainerResult(host, context, contextName).apply(md);
} catch (Exception e) { } catch (Exception e) {
ContainerResult result = new ContainerResult(contextName, host, null, e.getMessage()); StatusResult result = new StatusResult(contextName, host, null, e.getMessage());
logger.error(e, "Error listing service %s", contextName); logger.error(e, "Error listing service %s", contextName);
return result; return result;
} }

View File

@ -0,0 +1,61 @@
/**
*
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ====================================================================
*/
package org.jclouds.samples.googleappengine.functions;
import java.util.Map;
import javax.annotation.Resource;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.jclouds.compute.ComputeServiceContext;
import org.jclouds.compute.domain.ComputeMetadata;
import org.jclouds.logging.Logger;
import org.jclouds.samples.googleappengine.domain.StatusResult;
import com.google.common.base.Function;
import com.google.common.collect.Iterables;
@Singleton
public class ComputeServiceContextToStatusResult implements Function<String, StatusResult> {
@Inject
private Map<String, ComputeServiceContext> contexts;
@Resource
protected Logger logger = Logger.NULL;
public StatusResult apply(final String contextName) {
final ComputeServiceContext context = contexts.get(contextName);
final String host = context.getProviderSpecificContext().getEndPoint().getHost();
String status;
String name = "not found";
try {
long start = System.currentTimeMillis();
Map<String, ? extends ComputeMetadata> nodes = context.getComputeService().getNodes();
if (nodes.size() > 0)
name = Iterables.get(nodes.keySet(), 0);
status = ((System.currentTimeMillis() - start) + "ms");
} catch (Exception e) {
logger.error(e, "Error listing service %s", contextName);
status = (e.getMessage());
}
return new StatusResult(contextName, host, name, status);
}
}

View File

@ -22,14 +22,14 @@
<%@ taglib uri="http://displaytag.sf.net" prefix="display"%> <%@ taglib uri="http://displaytag.sf.net" prefix="display"%>
<html> <html>
<head> <head>
<title>jclouds: anyweight cloudware for java</title> <title>jclouds: multi-cloud framework</title>
</head> </head>
<body> <body>
<h2>Container List</h2> <h2>Status List</h2>
<display:table name="containers" > <display:table name="status" >
<display:column property="service" title="Service" /> <display:column property="service" title="Service" />
<display:column property="host" title="Host" /> <display:column property="host" title="Host" />
<display:column property="name" title="Container" /> <display:column property="name" title="Item" />
<display:column property="status" title="Status" /> <display:column property="status" title="Status" />
</display:table> </display:table>
</body> </body>

View File

@ -20,12 +20,11 @@
--%> --%>
<html> <html>
<head> <head>
<title>jclouds: anyweight cloudware for java</title> <title>jclouds: multi-cloud framework</title>
</head> </head>
<body> <body>
<h2>Welcome!</h2> <h2>Welcome!</h2>
Click Click
<a href="/guice/containers.blobstore">here</a> <a href="/guice/status.check">here</a> to get status of cloud services.
to list my containers.
</body> </body>
</html> </html>

View File

@ -21,23 +21,14 @@ package org.jclouds.samples.googleappengine.functest;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import static org.jclouds.aws.reference.AWSConstants.PROPERTY_AWS_ACCESSKEYID; import static org.jclouds.aws.reference.AWSConstants.PROPERTY_AWS_ACCESSKEYID;
import static org.jclouds.aws.reference.AWSConstants.PROPERTY_AWS_SECRETACCESSKEY; import static org.jclouds.aws.reference.AWSConstants.PROPERTY_AWS_SECRETACCESSKEY;
import static org.jclouds.azure.storage.reference.AzureStorageConstants.PROPERTY_AZURESTORAGE_ACCOUNT;
import static org.jclouds.azure.storage.reference.AzureStorageConstants.PROPERTY_AZURESTORAGE_KEY;
import static org.jclouds.rackspace.reference.RackspaceConstants.PROPERTY_RACKSPACE_KEY;
import static org.jclouds.rackspace.reference.RackspaceConstants.PROPERTY_RACKSPACE_USER;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.URL; import java.net.URL;
import java.util.Properties; import java.util.Properties;
import org.jclouds.aws.s3.S3ContextBuilder; import org.jclouds.aws.ec2.EC2PropertiesBuilder;
import org.jclouds.aws.s3.S3PropertiesBuilder; import org.jclouds.aws.s3.S3PropertiesBuilder;
import org.jclouds.azure.storage.blob.AzureBlobPropertiesBuilder;
import org.jclouds.azure.storage.blob.AzureBlobContextBuilder;
import org.jclouds.rackspace.cloudfiles.CloudFilesContextBuilder;
import org.jclouds.rackspace.cloudfiles.CloudFilesPropertiesBuilder;
import org.jclouds.samples.googleappengine.config.GuiceServletConfig;
import org.jclouds.util.Utils; import org.jclouds.util.Utils;
import org.testng.annotations.BeforeTest; import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters; import org.testng.annotations.Parameters;
@ -62,10 +53,6 @@ public class GoogleAppEngineLiveTest {
url = new URL(String.format("http://%s:%s", address, port)); url = new URL(String.format("http://%s:%s", address, port));
Properties props = new Properties(); Properties props = new Properties();
props.setProperty(GuiceServletConfig.PROPERTY_BLOBSTORE_CONTEXTS, String.format("%s,%s,%s",
S3ContextBuilder.class.getName(), CloudFilesContextBuilder.class.getName(),
AzureBlobContextBuilder.class.getName()));
props = new S3PropertiesBuilder(props) props = new S3PropertiesBuilder(props)
.withCredentials( .withCredentials(
checkNotNull(System.getProperty(PROPERTY_AWS_ACCESSKEYID), checkNotNull(System.getProperty(PROPERTY_AWS_ACCESSKEYID),
@ -73,14 +60,12 @@ public class GoogleAppEngineLiveTest {
System.getProperty(PROPERTY_AWS_SECRETACCESSKEY, System.getProperty(PROPERTY_AWS_SECRETACCESSKEY,
PROPERTY_AWS_SECRETACCESSKEY)).build(); PROPERTY_AWS_SECRETACCESSKEY)).build();
props = new CloudFilesPropertiesBuilder(props).withCredentials( props = new EC2PropertiesBuilder(props)
checkNotNull(System.getProperty(PROPERTY_RACKSPACE_USER), PROPERTY_RACKSPACE_USER), .withCredentials(
System.getProperty(PROPERTY_RACKSPACE_KEY, PROPERTY_RACKSPACE_KEY)).build(); checkNotNull(System.getProperty(PROPERTY_AWS_ACCESSKEYID),
PROPERTY_AWS_ACCESSKEYID),
props = new AzureBlobPropertiesBuilder(props).withCredentials( System.getProperty(PROPERTY_AWS_SECRETACCESSKEY,
checkNotNull(System.getProperty(PROPERTY_AZURESTORAGE_ACCOUNT), PROPERTY_AWS_SECRETACCESSKEY)).build();
PROPERTY_AZURESTORAGE_ACCOUNT),
System.getProperty(PROPERTY_AZURESTORAGE_KEY, PROPERTY_AZURESTORAGE_KEY)).build();
server = new GoogleDevServer(); server = new GoogleDevServer();
server.writePropertiesAndStartServer(address, port, warfile, props); server.writePropertiesAndStartServer(address, port, warfile, props);
@ -95,7 +80,7 @@ public class GoogleAppEngineLiveTest {
@Test(invocationCount = 5, enabled = true) @Test(invocationCount = 5, enabled = true)
public void testGuiceJCloudsSerial() throws InterruptedException, IOException { public void testGuiceJCloudsSerial() throws InterruptedException, IOException {
URL gurl = new URL(url, "/guice/containers.blobstore"); URL gurl = new URL(url, "/guice/status.check");
InputStream i = gurl.openStream(); InputStream i = gurl.openStream();
String string = Utils.toStringAndClose(i); String string = Utils.toStringAndClose(i);
assert string.indexOf("List") >= 0 : string; assert string.indexOf("List") >= 0 : string;
@ -103,7 +88,7 @@ public class GoogleAppEngineLiveTest {
@Test(invocationCount = 10, enabled = true, threadPoolSize = 3) @Test(invocationCount = 10, enabled = true, threadPoolSize = 3)
public void testGuiceJCloudsParallel() throws InterruptedException, IOException { public void testGuiceJCloudsParallel() throws InterruptedException, IOException {
URL gurl = new URL(url, "/guice/containers.blobstore"); URL gurl = new URL(url, "/guice/status.check");
InputStream i = gurl.openStream(); InputStream i = gurl.openStream();
String string = Utils.toStringAndClose(i); String string = Utils.toStringAndClose(i);
assert string.indexOf("List") >= 0 : string; assert string.indexOf("List") >= 0 : string;