diff --git a/core/src/test/java/org/jclouds/http/BaseHttpCommandExecutorServiceIntegrationTest.java b/core/src/test/java/org/jclouds/http/BaseHttpCommandExecutorServiceIntegrationTest.java index 52162b28ca..b47d7c49bf 100644 --- a/core/src/test/java/org/jclouds/http/BaseHttpCommandExecutorServiceIntegrationTest.java +++ b/core/src/test/java/org/jclouds/http/BaseHttpCommandExecutorServiceIntegrationTest.java @@ -18,7 +18,16 @@ */ package org.jclouds.http; +import static com.google.common.io.Closeables.closeQuietly; +import static java.lang.String.format; +import static org.jclouds.crypto.CryptoStreams.base64; +import static org.jclouds.crypto.CryptoStreams.md5Base64; +import static org.jclouds.http.options.GetOptions.Builder.tail; +import static org.jclouds.io.Payloads.newFilePayload; +import static org.jclouds.io.Payloads.newStringPayload; +import static org.jclouds.util.Throwables2.getFirstThrowableOfType; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; @@ -27,31 +36,23 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.net.MalformedURLException; import java.net.URI; import java.security.MessageDigest; -import java.util.Collections; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; -import org.jclouds.crypto.CryptoStreams; -import org.jclouds.http.options.GetOptions; import org.jclouds.io.InputSuppliers; import org.jclouds.io.Payload; -import org.jclouds.io.Payloads; import org.jclouds.util.Strings2; -import org.jclouds.util.Throwables2; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; import com.google.common.collect.Multimap; -import com.google.common.io.Closeables; /** - * Tests for functionality all HttpCommandExecutorServices must express. These tests will operate - * against an in-memory http engine, so as to ensure end-to-end functionality works. + * Tests for functionality all {@link HttpCommandExecutorService http executor + * services} must express. These tests will operate against an in-memory http + * engine, so as to ensure end-to-end functionality works. * * @author Adrian Cole */ @@ -59,38 +60,30 @@ import com.google.common.io.Closeables; public abstract class BaseHttpCommandExecutorServiceIntegrationTest extends BaseJettyTest { @Test(invocationCount = 25, timeOut = 5000) - public void testRequestFilter() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { + public void testRequestFilter() { assertEquals(client.downloadFilter("", "filterme").trim(), "test"); } - // TODO: filtering redirect test - @Test(invocationCount = 5, timeOut = 5000) - public void testGetStringWithHeader() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { + public void testGetStringWithHeader() { assertEquals(client.download("", "test").trim(), "test"); } @Test(invocationCount = 1, timeOut = 5000) - public void testAlternateMethod() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { + public void testAlternateMethod() { assertEquals(client.rowdy("").trim(), XML); } @Test(invocationCount = 5, timeOut = 5000) - public void testGetString() throws MalformedURLException, ExecutionException, InterruptedException, TimeoutException { + public void testGetString() { assertEquals(client.download("").trim(), XML); } @Test(invocationCount = 5, timeOut = 5000) - public void testGetStringViaRequest() throws ExecutionException, InterruptedException, TimeoutException, IOException { - assertEquals( - Strings2.toStringAndClose( - client.invoke( - HttpRequest.builder().method("GET") - .endpoint("http://localhost:" + testPort + "/objects/").build()).getPayload() - .getInput()).trim(), XML); + public void testGetStringViaRequest() throws IOException { + HttpResponse getStringResponse = client.invoke(HttpRequest.builder().method("GET") + .endpoint(format("http://localhost:%d/objects/", testPort)).build()); + assertEquals(Strings2.toString(getStringResponse.getPayload()).trim(), XML); } @DataProvider(name = "gets") @@ -99,71 +92,52 @@ public abstract class BaseHttpCommandExecutorServiceIntegrationTest extends Base } @Test(invocationCount = 5, timeOut = 5000, dataProvider = "gets") - public void testGetStringSynch(String uri) throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { - // TODO why need trim? + public void testGetStringSynch(String uri) { assertEquals(client.synch(uri).trim(), XML); } @Test(invocationCount = 5, timeOut = 5000) - public void testGetException() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { - assertEquals(client.downloadException("", GetOptions.Builder.tail(1)).trim(), "foo"); + public void testGetException() { + assertEquals(client.downloadException("", tail(1)).trim(), "foo"); } @Test(invocationCount = 5, timeOut = 5000) - public void testGetSynchException() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { + public void testGetSynchException() { assertEquals(client.synchException("", "").trim(), "foo"); } @Test(invocationCount = 5, timeOut = 5000) - public void testGetStringRedirect() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { + public void testGetStringRedirect() { assertEquals(client.download("redirect").trim(), XML2); } @Test(invocationCount = 100, timeOut = 5000) - public void testGetBigFile() throws ExecutionException, InterruptedException, TimeoutException, IOException { + public void testGetBigFile() throws IOException { InputStream input = getConsitution(); try { - assertEquals(CryptoStreams.md5Base64(InputSuppliers.of(input)), md5); + assertEquals(md5Base64(InputSuppliers.of(input)), md5); } catch (RuntimeException e) { - Closeables.closeQuietly(input); + closeQuietly(input); // since we are parsing client side, and not through a response - // handler, the user - // must retry directly. In this case, we are assuming lightning doesn't - // strike - // twice in the same spot. - if (Throwables2.getFirstThrowableOfType(e, IOException.class) != null) { + // handler, the user must retry directly. In this case, we are assuming + // lightning doesn't strike twice in the same spot. + if (getFirstThrowableOfType(e, IOException.class) != null) { input = getConsitution(); - assertEquals(CryptoStreams.md5Base64(InputSuppliers.of(input)), md5); + assertEquals(md5Base64(InputSuppliers.of(input)), md5); } + } finally { + closeQuietly(input); } } private InputStream getConsitution() { - InputStream input = context.utils().http() - .get(URI.create(String.format("http://localhost:%d/%s", testPort, "101constitutions"))); - return input; - } - - @Test(enabled = false, invocationCount = 5, timeOut = 5000) - public void testGetStringPermanentRedirect() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { - // GetString get = factory.createGetString("permanentredirect"); - // assert get != null; - // client.submit(get); - // assertEquals(get.get(10, TimeUnit.SECONDS).trim(), XML2); - // TODO assert misses are only one, as permanent redirects paths should be - // remembered. + URI constitutionUri = URI.create(format("http://localhost:%d/101constitutions", testPort)); + return context.utils().http().get(constitutionUri); } /** - * Tests sending a big file to the server. Note: this is a heavy test, takes several minutes to - * finish. - * - * @throws java.io.IOException + * Tests sending a big file to the server. Note: this is a heavy test, takes + * several minutes to finish. */ @Test(invocationCount = 1) public void testUploadBigFile() throws IOException { @@ -185,35 +159,30 @@ public abstract class BaseHttpCommandExecutorServiceIntegrationTest extends Base os.write((byte) 'a'); } os.flush(); - } catch (IOException e) { - throw new RuntimeException(e); } finally { - Closeables.closeQuietly(out); + closeQuietly(out); } - Payload payload = Payloads.newFilePayload(f); + Payload payload = newFilePayload(f); byte[] digest = digester.digest(); payload.getContentMetadata().setContentMD5(digest); Multimap headers = client.postPayloadAndReturnHeaders("", payload); - assertEquals(headers.get("x-Content-MD5"), - ImmutableList.of(CryptoStreams.base64(digest))); + assertEquals(headers.get("x-Content-MD5"), ImmutableList.of(base64(digest))); payload.release(); } finally { - if (os != null) - os.close(); + closeQuietly(os); if (f != null && f.exists()) f.delete(); } } @Test(invocationCount = 5, timeOut = 5000) - public void testPost() throws MalformedURLException, ExecutionException, InterruptedException, TimeoutException { + public void testPost() { assertEquals(client.post("", "foo").trim(), "fooPOST"); } @Test(invocationCount = 1, timeOut = 5000) - public void testPostAsInputStream() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { + public void testPostAsInputStream() { AtomicInteger postFailures = new AtomicInteger(); for (int i = 0; i < 5; i++) try { @@ -221,19 +190,17 @@ public abstract class BaseHttpCommandExecutorServiceIntegrationTest extends Base } catch (Exception e) { postFailures.incrementAndGet(); } - assert postFailures.get() > 0; + assertTrue(postFailures.get() > 0, "expected failures"); } @Test(invocationCount = 5, timeOut = 5000) - public void testPostBinder() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { + public void testPostBinder() { assertEquals(client.postJson("", "foo").trim(), "{\"key\":\"foo\"}POST"); } @Test(invocationCount = 5, timeOut = 5000) - public void testPostContentDisposition() throws ExecutionException, InterruptedException, TimeoutException, - IOException { - Payload payload = Payloads.newStringPayload("foo"); + public void testPostContentDisposition() { + Payload payload = newStringPayload("foo"); payload.getContentMetadata().setContentDisposition("attachment; filename=photo.jpg"); Multimap headers = client.postPayloadAndReturnHeaders("", payload); assertEquals(headers.get("x-Content-Disposition"), ImmutableList.of("attachment; filename=photo.jpg")); @@ -241,8 +208,8 @@ public abstract class BaseHttpCommandExecutorServiceIntegrationTest extends Base } @Test(invocationCount = 5, timeOut = 5000) - public void testPostContentEncoding() throws ExecutionException, InterruptedException, TimeoutException, IOException { - Payload payload = Payloads.newStringPayload("foo"); + public void testPostContentEncoding() { + Payload payload = newStringPayload("foo"); payload.getContentMetadata().setContentEncoding("gzip"); Multimap headers = client.postPayloadAndReturnHeaders("", payload); assertEquals(headers.get("x-Content-Encoding"), ImmutableList.of("gzip")); @@ -250,8 +217,8 @@ public abstract class BaseHttpCommandExecutorServiceIntegrationTest extends Base } @Test(invocationCount = 5, timeOut = 5000) - public void testPostContentLanguage() throws ExecutionException, InterruptedException, TimeoutException, IOException { - Payload payload = Payloads.newStringPayload("foo"); + public void testPostContentLanguage() { + Payload payload = newStringPayload("foo"); payload.getContentMetadata().setContentLanguage("mi, en"); Multimap headers = client.postPayloadAndReturnHeaders("", payload); assertEquals(headers.get("x-Content-Language"), ImmutableList.of("mi, en")); @@ -259,24 +226,22 @@ public abstract class BaseHttpCommandExecutorServiceIntegrationTest extends Base } @Test(invocationCount = 5, timeOut = 5000) - public void testPut() throws MalformedURLException, ExecutionException, InterruptedException, TimeoutException { + public void testPut() { assertEquals(client.upload("", "foo").trim(), "fooPUT"); } @Test(invocationCount = 5, timeOut = 5000) - public void testPutRedirect() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { + public void testPutRedirect() { assertEquals(client.upload("redirect", "foo").trim(), "fooPUTREDIRECT"); } @Test(invocationCount = 5, timeOut = 5000) - public void testHead() throws MalformedURLException, ExecutionException, InterruptedException, TimeoutException { - assert client.exists(""); + public void testHead() { + assertTrue(client.exists(""), "head returned false"); } @Test(invocationCount = 5, timeOut = 5000) - public void testGetAndParseSax() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { + public void testGetAndParseSax() { assertEquals(client.downloadAndParse(""), "whoppers"); } } diff --git a/core/src/test/java/org/jclouds/http/BaseJettyTest.java b/core/src/test/java/org/jclouds/http/BaseJettyTest.java index f2b7e8105d..d71d3c7a05 100644 --- a/core/src/test/java/org/jclouds/http/BaseJettyTest.java +++ b/core/src/test/java/org/jclouds/http/BaseJettyTest.java @@ -18,21 +18,28 @@ */ package org.jclouds.http; -import static com.google.common.base.Throwables.propagate; -import static com.google.common.collect.Maps.newHashMap; +import static com.google.common.base.Throwables.getStackTraceAsString; import static com.google.common.io.ByteStreams.copy; import static com.google.common.io.ByteStreams.join; import static com.google.common.io.ByteStreams.newInputStreamSupplier; import static com.google.common.io.ByteStreams.toByteArray; import static com.google.common.io.Closeables.closeQuietly; +import static com.google.common.util.concurrent.Uninterruptibles.sleepUninterruptibly; +import static javax.servlet.http.HttpServletResponse.SC_OK; +import static javax.ws.rs.core.HttpHeaders.CONTENT_ENCODING; +import static javax.ws.rs.core.HttpHeaders.CONTENT_LANGUAGE; import static javax.ws.rs.core.HttpHeaders.CONTENT_LENGTH; +import static org.jclouds.Constants.PROPERTY_RELAX_HOSTNAME; +import static org.jclouds.Constants.PROPERTY_TRUST_ALL_CERTS; +import static org.jclouds.crypto.CryptoStreams.md5Base64; +import static org.jclouds.util.Strings2.toStringAndClose; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; -import java.util.Map; import java.util.Properties; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -41,7 +48,6 @@ import java.util.zip.GZIPInputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.core.HttpHeaders; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Handler; @@ -50,19 +56,18 @@ import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.AbstractHandler; import org.eclipse.jetty.server.ssl.SslSelectChannelConnector; import org.eclipse.jetty.util.ssl.SslContextFactory; -import org.jclouds.Constants; import org.jclouds.ContextBuilder; -import org.jclouds.crypto.CryptoStreams; import org.jclouds.io.InputSuppliers; import org.jclouds.providers.AnonymousProviderMetadata; import org.jclouds.rest.RestContext; -import org.jclouds.util.Strings2; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Optional; import org.testng.annotations.Parameters; -import com.google.common.base.Throwables; +import com.google.common.base.Splitter; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMap.Builder; import com.google.common.collect.ImmutableSet; import com.google.common.collect.LinkedHashMultimap; import com.google.common.collect.Multimap; @@ -86,40 +91,36 @@ public abstract class BaseJettyTest { static final Pattern actionPattern = Pattern.compile("/objects/(.*)/action/([a-z]*);?(.*)"); @BeforeTest - @Parameters( { "test-jetty-port" }) + @Parameters({ "test-jetty-port" }) public void setUpJetty(@Optional("8123") final int testPort) throws Exception { this.testPort = testPort; final InputSupplier oneHundredOneConstitutions = getTestDataSupplier(); - md5 = CryptoStreams.md5Base64(oneHundredOneConstitutions); + md5 = md5Base64(oneHundredOneConstitutions); Handler server1Handler = new AbstractHandler() { public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { + throws IOException, ServletException { InputStream body = request.getInputStream(); try { if (failIfNoContentLength(request, response)) { return; } else if (target.indexOf("sleep") > 0) { - try { - Thread.sleep(100); - } catch (InterruptedException e) { - propagate(e); - } + sleepUninterruptibly(100, TimeUnit.MILLISECONDS); response.setContentType("text/xml"); - response.setStatus(HttpServletResponse.SC_OK); + response.setStatus(SC_OK); } else if (target.indexOf("redirect") > 0) { response.sendRedirect("https://localhost:" + (testPort + 1) + "/"); } else if (target.indexOf("101constitutions") > 0) { response.setContentType("text/plain"); response.setHeader("Content-MD5", md5); - response.setStatus(HttpServletResponse.SC_OK); + response.setStatus(SC_OK); copy(oneHundredOneConstitutions, response.getOutputStream()); } else if (request.getMethod().equals("PUT")) { if (request.getContentLength() > 0) { - response.setStatus(HttpServletResponse.SC_OK); - response.getWriter().println(Strings2.toStringAndClose(body) + "PUT"); + response.setStatus(SC_OK); + response.getWriter().println(toStringAndClose(body) + "PUT"); } else { response.sendError(500, "no content"); } @@ -138,26 +139,24 @@ public abstract class BaseJettyTest { response.sendError(404, "no content"); } else if (request.getHeader("test") != null) { response.setContentType("text/plain"); - response.setStatus(HttpServletResponse.SC_OK); + response.setStatus(SC_OK); response.getWriter().println("test"); } else if (request.getMethod().equals("HEAD")) { - /* - * NOTE: by HTML specification, HEAD response MUST NOT include a body - */ + // by HTML specification, HEAD response MUST NOT include a + // body response.setContentType("text/xml"); - response.setStatus(HttpServletResponse.SC_OK); + response.setStatus(SC_OK); } else { if (failEveryTenRequests(request, response)) return; response.setContentType("text/xml"); - response.setStatus(HttpServletResponse.SC_OK); + response.setStatus(SC_OK); response.getWriter().println(XML); } ((Request) request).setHandled(true); } catch (IOException e) { - if (body != null) - closeQuietly(body); - response.sendError(500, Throwables.getStackTraceAsString(e)); + closeQuietly(body); + response.sendError(500, getStackTraceAsString(e)); } } @@ -184,44 +183,41 @@ public abstract class BaseJettyTest { if (request.getHeader("Content-MD5") != null) { String expectedMd5 = request.getHeader("Content-MD5"); String realMd5FromRequest; - realMd5FromRequest = CryptoStreams.md5Base64(InputSuppliers.of(body)); + realMd5FromRequest = md5Base64(InputSuppliers.of(body)); boolean matched = expectedMd5.equals(realMd5FromRequest); if (matched) { - response.setStatus(HttpServletResponse.SC_OK); + response.setStatus(SC_OK); response.addHeader("x-Content-MD5", realMd5FromRequest); } else { response.sendError(500, "didn't match"); } } else { - String responseString = (request.getContentLength() < 10240) ? Strings2.toStringAndClose(body) + "POST" - : "POST"; + String responseString = (request.getContentLength() < 10240) ? toStringAndClose(body) + "POST" : "POST"; body = null; - for (String header : new String[] { "Content-Disposition", HttpHeaders.CONTENT_LANGUAGE, - HttpHeaders.CONTENT_ENCODING }) + for (String header : new String[] { "Content-Disposition", CONTENT_LANGUAGE, CONTENT_ENCODING }) if (request.getHeader(header) != null) { response.addHeader("x-" + header, request.getHeader(header)); } - response.setStatus(HttpServletResponse.SC_OK); + response.setStatus(SC_OK); response.getWriter().println(responseString); } } catch (IOException e) { - if (body != null) - closeQuietly(body); - response.sendError(500, Throwables.getStackTraceAsString(e)); + closeQuietly(body); + response.sendError(500, getStackTraceAsString(e)); } } protected void setupAndStartSSLServer(final int testPort) throws Exception { Handler server2Handler = new AbstractHandler() { public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { + throws IOException, ServletException { InputStream body = request.getInputStream(); try { if (request.getMethod().equals("PUT")) { - String text = Strings2.toStringAndClose(body); + String text = toStringAndClose(body); body = null; if (request.getContentLength() > 0) { - response.setStatus(HttpServletResponse.SC_OK); + response.setStatus(SC_OK); response.getWriter().println(text + "PUTREDIRECT"); } } else if (request.getMethod().equals("POST")) { @@ -231,21 +227,19 @@ public abstract class BaseJettyTest { handleAction(request, response); } } else if (request.getMethod().equals("HEAD")) { - /* - * NOTE: by HTML specification, HEAD response MUST NOT include a body - */ + // by HTML specification, HEAD response MUST NOT include a + // body response.setContentType("text/xml"); - response.setStatus(HttpServletResponse.SC_OK); + response.setStatus(SC_OK); } else { response.setContentType("text/xml"); - response.setStatus(HttpServletResponse.SC_OK); + response.setStatus(SC_OK); response.getWriter().println(XML2); } ((Request) request).setHandled(true); } catch (IOException e) { - if (body != null) - closeQuietly(body); - response.sendError(500, Throwables.getStackTraceAsString(e)); + closeQuietly(body); + response.sendError(500, getStackTraceAsString(e)); } } }; @@ -262,8 +256,8 @@ public abstract class BaseJettyTest { ssl.setTrustStore("src/test/resources/test.jks"); ssl.setTrustStorePassword("jclouds"); - server2.setConnectors(new Connector[]{ ssl_connector }); - + server2.setConnectors(new Connector[] { ssl_connector }); + server2.start(); } @@ -281,18 +275,18 @@ public abstract class BaseJettyTest { } public static ContextBuilder newBuilder(int testPort, Properties properties, Module... connectionModules) { - properties.setProperty(Constants.PROPERTY_TRUST_ALL_CERTS, "true"); - properties.setProperty(Constants.PROPERTY_RELAX_HOSTNAME, "true"); - return ContextBuilder.newBuilder( - AnonymousProviderMetadata.forClientMappedToAsyncClientOnEndpoint(IntegrationTestClient.class, IntegrationTestAsyncClient.class, - "http://localhost:" + testPort)) - .modules(ImmutableSet. copyOf(connectionModules)) - .overrides(properties); + properties.setProperty(PROPERTY_TRUST_ALL_CERTS, "true"); + properties.setProperty(PROPERTY_RELAX_HOSTNAME, "true"); + return ContextBuilder + .newBuilder( + AnonymousProviderMetadata.forClientMappedToAsyncClientOnEndpoint(IntegrationTestClient.class, + IntegrationTestAsyncClient.class, "http://localhost:" + testPort)) + .modules(ImmutableSet. copyOf(connectionModules)).overrides(properties); } @AfterTest public void tearDownJetty() throws Exception { - context.close(); + closeQuietly(context); if (server2 != null) server2.stop(); server.stop(); @@ -320,7 +314,7 @@ public abstract class BaseJettyTest { } protected boolean redirectEveryTwentyRequests(HttpServletRequest request, HttpServletResponse response) - throws IOException { + throws IOException { if (cycle.incrementAndGet() % 20 == 0) { response.sendRedirect("http://localhost:" + (testPort + 1) + "/"); ((Request) request).setHandled(true); @@ -355,18 +349,12 @@ public abstract class BaseJettyTest { if (matchFound) { String objectId = matcher.group(1); String action = matcher.group(2); - Map options = newHashMap(); + Builder options = ImmutableMap. builder(); if (matcher.groupCount() == 3) { - String optionsGroup = matcher.group(3); - for (String entry : optionsGroup.split(";")) { - if (entry.indexOf('=') >= 0) { - String[] keyValue = entry.split("="); - options.put(keyValue[0], keyValue[1]); - } - } + options.putAll(Splitter.on(';').withKeyValueSeparator("=").split(matcher.group(3))); } - response.setStatus(HttpServletResponse.SC_OK); - response.getWriter().println(objectId + "->" + action + ":" + options); + response.setStatus(SC_OK); + response.getWriter().println(objectId + "->" + action + ":" + options.build()); } else { response.sendError(500, "no content"); } diff --git a/drivers/apachehc/src/test/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorServiceTestDisabled.java b/drivers/apachehc/src/test/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorServiceTestDisabled.java index dea5e1466a..8839e0e065 100644 --- a/drivers/apachehc/src/test/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorServiceTestDisabled.java +++ b/drivers/apachehc/src/test/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorServiceTestDisabled.java @@ -25,14 +25,11 @@ import static org.jclouds.Constants.PROPERTY_MAX_CONNECTIONS_PER_HOST; import static org.jclouds.Constants.PROPERTY_SO_TIMEOUT; import static org.jclouds.Constants.PROPERTY_USER_THREADS; -import java.io.IOException; import java.util.Properties; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeoutException; import org.jclouds.http.BaseHttpCommandExecutorServiceIntegrationTest; import org.jclouds.http.apachehc.config.ApacheHCHttpCommandExecutorServiceModule; -import org.testng.annotations.Test; +import org.testng.SkipException; import com.google.inject.Module; @@ -61,25 +58,18 @@ public class ApacheHCHttpCommandExecutorServiceTestDisabled extends BaseHttpComm } @Override - @Test(enabled = false) - public void testPostContentDisposition() throws ExecutionException, InterruptedException, TimeoutException, - IOException { - // TODO: currently times out, see issue - // http://code.google.com/p/jclouds/issues/detail?id=353 + public void testPostContentDisposition() { + throw new SkipException("http://code.google.com/p/jclouds/issues/detail?id=353"); } @Override - @Test(enabled = false) - public void testPostContentEncoding() throws ExecutionException, InterruptedException, TimeoutException, IOException { - // TODO: currently times out, see issue - // http://code.google.com/p/jclouds/issues/detail?id=353 + public void testPostContentEncoding() { + throw new SkipException("http://code.google.com/p/jclouds/issues/detail?id=353"); } @Override - @Test(enabled = false) - public void testPostContentLanguage() throws ExecutionException, InterruptedException, TimeoutException, IOException { - // TODO: currently times out, see issue - // http://code.google.com/p/jclouds/issues/detail?id=353 + public void testPostContentLanguage() { + throw new SkipException("http://code.google.com/p/jclouds/issues/detail?id=353"); } } diff --git a/drivers/gae/src/test/java/org/jclouds/gae/AsyncGaeHttpCommandExecutorServiceIntegrationTest.java b/drivers/gae/src/test/java/org/jclouds/gae/AsyncGaeHttpCommandExecutorServiceIntegrationTest.java index 0ccb809a5c..7c7da72cd4 100644 --- a/drivers/gae/src/test/java/org/jclouds/gae/AsyncGaeHttpCommandExecutorServiceIntegrationTest.java +++ b/drivers/gae/src/test/java/org/jclouds/gae/AsyncGaeHttpCommandExecutorServiceIntegrationTest.java @@ -18,22 +18,12 @@ */ package org.jclouds.gae; -import static org.jclouds.concurrent.FutureIterables.awaitCompletion; - import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URI; -import java.util.Map; import java.util.Properties; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeoutException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.jclouds.concurrent.Futures; -import org.jclouds.concurrent.MoreExecutors; import org.jclouds.concurrent.SingleThreaded; import org.jclouds.concurrent.config.ConfiguresExecutorService; import org.jclouds.gae.config.GoogleAppEngineConfigurationModule; @@ -41,18 +31,12 @@ import org.jclouds.http.BaseHttpCommandExecutorServiceIntegrationTest; import org.jclouds.http.HttpCommandExecutorService; import org.jclouds.http.config.ConfiguresHttpCommandExecutorService; import org.jclouds.logging.Logger; -import org.jclouds.util.Strings2; +import org.testng.SkipException; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; -import com.google.appengine.api.urlfetch.URLFetchService; -import com.google.appengine.api.urlfetch.URLFetchServiceFactory; import com.google.appengine.tools.development.testing.LocalServiceTestHelper; import com.google.appengine.tools.development.testing.LocalURLFetchServiceTestConfig; -import com.google.common.base.Supplier; -import com.google.common.base.Throwables; -import com.google.common.collect.Maps; -import com.google.common.util.concurrent.ListenableFuture; import com.google.inject.Injector; import com.google.inject.Module; @@ -69,129 +53,21 @@ public class AsyncGaeHttpCommandExecutorServiceIntegrationTest extends BaseHttpC @Override protected void setupAndStartSSLServer(final int testPort) throws Exception { } - + + @Override protected boolean redirectEveryTwentyRequests(HttpServletRequest request, HttpServletResponse response) throws IOException { return false; } - @Test(enabled = false) - public void testPerformanceVsNothing() throws TimeoutException { - setupApiProxy(); - int count = 5; - final URI fetch = URI.create("http://www.google.com"); - - final URLFetchService service = URLFetchServiceFactory.getURLFetchService(); - Results gae = getTest(count, "gae", new Supplier>() { - - @Override - public ListenableFuture get() { - try { - return Futures.makeListenable(service.fetchAsync(fetch.toURL()), MoreExecutors.sameThreadExecutor()); - } catch (MalformedURLException e) { - throw Throwables.propagate(e); - } - } - - }, new Consumer() { - - @SuppressWarnings("unchecked") - @Override - public void consume(Object in) { - try { - new String(((ListenableFuture) in).get().getContent()); - } catch (InterruptedException e) { - Throwables.propagate(e); - } catch (ExecutionException e) { - Throwables.propagate(e); - } - } - - }); - Results jclouds = getTest(count, "jclouds", new Supplier>() { - - @Override - public ListenableFuture get() { - return AsyncGaeHttpCommandExecutorServiceIntegrationTest.this.context.utils().asyncHttp().get(fetch); - } - - }, new Consumer() { - - @SuppressWarnings("unchecked") - @Override - public void consume(Object in) { - try { - Strings2.toStringAndClose(((ListenableFuture) in).get()); - } catch (InterruptedException e) { - Throwables.propagate(e); - } catch (ExecutionException e) { - Throwables.propagate(e); - } catch (IOException e) { - Throwables.propagate(e); - } - } - - }); - System.err.println(jclouds + " " + gae); - long overhead = 10; - assert jclouds.createFutures <= gae.createFutures + overhead : jclouds + " " + gae; - assert jclouds.futuresReady <= gae.futuresReady + overhead : jclouds + " " + gae; - assert jclouds.futuresConsumed <= gae.futuresConsumed + overhead : jclouds + " " + gae; - } - - interface Consumer { - void consume(Object in); - } - - class Results { - - public long createFutures; - public long futuresReady; - public long futuresConsumed; - public int count; - public String who; - - @Override - public String toString() { - return "[count=" + count + ", createFutures=" + createFutures + ", futuresConsumed=" + futuresConsumed - + ", futuresReady=" + futuresReady + ", who=" + who + "]"; - } - - } - - private Results getTest(int count, String who, Supplier> getSupplier, Consumer consumer) - throws TimeoutException { - Results results = new Results(); - results.count = count; - results.who = who; - Map> responses = Maps.newConcurrentMap(); - long start = System.currentTimeMillis(); - for (int i = 0; i < count; i++) - responses.put(i + "", getSupplier.get()); - results.createFutures = System.currentTimeMillis() - start; - start = System.currentTimeMillis(); - Map exceptions = awaitCompletion(responses, MoreExecutors.sameThreadExecutor(), null, logger, - who); - results.futuresReady = System.currentTimeMillis() - start; - assert exceptions.size() == 0 : exceptions; - start = System.currentTimeMillis(); - for (ListenableFuture value : responses.values()) - consumer.consume(value); - results.futuresConsumed = System.currentTimeMillis() - start; - return results; - } - @Override - @Test(enabled = false) - public void testPostAsInputStream() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { - // streams aren't supported + public void testPostAsInputStream() { + throw new SkipException("streams aren't supported"); } @Override @Test(enabled = true, invocationCount = 5, timeOut = 3000) - public void testPostBinder() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { + public void testPostBinder() { setupApiProxy(); super.testPostBinder(); } @@ -204,107 +80,87 @@ public class AsyncGaeHttpCommandExecutorServiceIntegrationTest extends BaseHttpC @Override @Test(enabled = true, invocationCount = 5, timeOut = 3000) - public void testGetAndParseSax() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { + public void testGetAndParseSax() { setupApiProxy(); super.testGetAndParseSax(); } @Override @Test(enabled = true, invocationCount = 5, timeOut = 3000) - public void testGetString() throws MalformedURLException, ExecutionException, InterruptedException, TimeoutException { + public void testGetString() { setupApiProxy(); super.testGetString(); } @Override @Test(enabled = true, invocationCount = 5, timeOut = 3000, dataProvider = "gets") - public void testGetStringSynch(String path) throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { + public void testGetStringSynch(String path) { setupApiProxy(); super.testGetStringSynch(path); } - // TODO: determine how to get redirects to operate @Override - @Test(enabled = false) - public void testGetStringRedirect() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { - setupApiProxy(); - super.testGetStringRedirect(); + public void testGetStringRedirect() { + throw new SkipException("need to get redirects to operate"); } @Override @Test(enabled = true, invocationCount = 5, timeOut = 3000) - public void testGetException() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { + public void testGetException() { setupApiProxy(); super.testGetException(); } @Override @Test(enabled = true, invocationCount = 5, timeOut = 3000) - public void testGetStringPermanentRedirect() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { - setupApiProxy(); - super.testGetStringPermanentRedirect(); - } - - @Override - @Test(enabled = true, invocationCount = 5, timeOut = 3000) - public void testGetSynchException() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { + public void testGetSynchException() { setupApiProxy(); super.testGetSynchException(); } @Override - @Test(enabled = false) + @Test(enabled = true, invocationCount = 5, timeOut = 3000) public void testPost() { + setupApiProxy(); + super.testPost(); } @Override @Test(enabled = true, invocationCount = 5, timeOut = 3000) - public void testPut() throws MalformedURLException, ExecutionException, InterruptedException, TimeoutException { + public void testPut() { setupApiProxy(); super.testPut(); } @Override @Test(enabled = true, invocationCount = 5, timeOut = 3000) - public void testGetStringViaRequest() throws ExecutionException, InterruptedException, TimeoutException, IOException { + public void testGetStringViaRequest() throws IOException { setupApiProxy(); super.testGetStringViaRequest(); } - // TODO: determine how to get redirects to operate @Override - @Test(enabled = false) - public void testPutRedirect() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { - setupApiProxy(); - super.testPutRedirect(); + public void testPutRedirect() { + throw new SkipException("need to get redirects to operate"); } @Override @Test(enabled = true, invocationCount = 5, timeOut = 3000) - public void testGetStringWithHeader() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { + public void testGetStringWithHeader() { setupApiProxy(); super.testGetStringWithHeader(); } @Override @Test(enabled = true, invocationCount = 5, timeOut = 3000) - public void testHead() throws MalformedURLException, ExecutionException, InterruptedException, TimeoutException { + public void testHead() { setupApiProxy(); super.testHead(); } @Override @Test(enabled = true, invocationCount = 5, timeOut = 3000) - public void testRequestFilter() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { + public void testRequestFilter() { setupApiProxy(); super.testRequestFilter(); } @@ -334,36 +190,31 @@ public class AsyncGaeHttpCommandExecutorServiceIntegrationTest extends BaseHttpC } @Override - @Test(enabled = true) - public void testGetBigFile() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { - // disabled since test data is too big + public void testGetBigFile() { + throw new SkipException("test data is too big for GAE"); } @Override - @Test(enabled = true) public void testUploadBigFile() throws IOException { - // disabled since test data is too big + throw new SkipException("test data is too big for GAE"); } @Override - @Test(enabled = false) - public void testPostContentDisposition() throws ExecutionException, InterruptedException, TimeoutException, - IOException { + public void testPostContentDisposition() { setupApiProxy(); super.testPostContentDisposition(); } @Override @Test(enabled = true, invocationCount = 5, timeOut = 3000) - public void testPostContentEncoding() throws ExecutionException, InterruptedException, TimeoutException, IOException { + public void testPostContentEncoding() { setupApiProxy(); super.testPostContentEncoding(); } @Override @Test(enabled = true, invocationCount = 5, timeOut = 3000) - public void testPostContentLanguage() throws ExecutionException, InterruptedException, TimeoutException, IOException { + public void testPostContentLanguage() { setupApiProxy(); super.testPostContentLanguage(); } @@ -371,8 +222,7 @@ public class AsyncGaeHttpCommandExecutorServiceIntegrationTest extends BaseHttpC // http://code.google.com/p/googleappengine/issues/detail?id=3599 @Override @Test(enabled = true, expectedExceptions = IllegalArgumentException.class) - public void testAlternateMethod() throws MalformedURLException, ExecutionException, InterruptedException, - TimeoutException { + public void testAlternateMethod() { setupApiProxy(); super.testAlternateMethod(); }