Issue 520:update to google appengine 1.4.3

This commit is contained in:
Adrian Cole 2011-04-08 21:02:21 -07:00
parent 0ccdc36480
commit ae091fb55d
7 changed files with 42 additions and 230 deletions

View File

@ -120,7 +120,7 @@
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-tools-sdk</artifactId>
<version>1.4.0</version>
<version>1.4.3</version>
<scope>system</scope>
<systemPath>${env.APPENGINE_HOME}/lib/appengine-tools-api.jar</systemPath>
</dependency>

View File

@ -33,8 +33,8 @@
<test.aws-s3.identity>${test.aws.identity}</test.aws-s3.identity>
<test.aws-s3.credential>${test.aws.credential}</test.aws-s3.credential>
<test.initializer>org.jclouds.aws.s3.blobstore.integration.AWSS3TestInitializer</test.initializer>
<jclouds.version>1.0-beta-9c-SNAPSHOT</jclouds.version>
<gae.version>1.4.0</gae.version>
<jclouds.version>1.0-SNAPSHOT</jclouds.version>
<gae.version>1.4.3</gae.version>
</properties>
<!-- bootstrapping: need to fetch the project POM -->
<repositories>

View File

@ -54,7 +54,7 @@
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>1.4.0</version>
<version>1.4.3</version>
</dependency>
<dependency>
@ -72,13 +72,13 @@
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-stubs</artifactId>
<version>1.4.0</version>
<version>1.4.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-testing</artifactId>
<version>1.4.0</version>
<version>1.4.3</version>
<scope>test</scope>
</dependency>
</dependencies>

View File

@ -20,7 +20,6 @@
package org.jclouds.gae;
import static com.google.appengine.api.urlfetch.FetchOptions.Builder.disallowTruncate;
import static com.google.common.io.Closeables.closeQuietly;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@ -28,7 +27,9 @@ import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Map.Entry;
import java.util.Set;
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.ws.rs.core.HttpHeaders;
@ -42,6 +43,8 @@ import com.google.appengine.api.urlfetch.HTTPMethod;
import com.google.appengine.api.urlfetch.HTTPRequest;
import com.google.appengine.repackaged.com.google.common.base.Throwables;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableSet;
import com.google.common.io.Closeables;
/**
*
@ -49,7 +52,16 @@ import com.google.common.base.Function;
*/
@Singleton
public class ConvertToGaeRequest implements Function<HttpRequest, HTTPRequest> {
public static final String USER_AGENT = "jclouds/1.0 urlfetch/1.3.5";
public static final String USER_AGENT = "jclouds/1.0 urlfetch/1.4.3";
protected final HttpUtils utils;
// http://code.google.com/appengine/docs/java/urlfetch/overview.html
public final Set<String> prohibitedHeaders = ImmutableSet.of("Accept-Encoding", "Content-Length", "Host", "Var",
"X-Forwarded-For");
@Inject
ConvertToGaeRequest(HttpUtils utils) {
this.utils = utils;
}
/**
* byte [] content is replayable and the only content type supportable by GAE. As such, we
@ -66,12 +78,15 @@ public class ConvertToGaeRequest implements Function<HttpRequest, HTTPRequest> {
FetchOptions options = disallowTruncate();
options.doNotFollowRedirects();
if (utils.relaxHostname() || utils.trustAllCerts())
options.doNotFollowRedirects();
options.setDeadline(10.0);
HTTPRequest gaeRequest = new HTTPRequest(url, HTTPMethod.valueOf(request.getMethod().toString()), options);
for (String header : request.getHeaders().keySet()) {
for (String value : request.getHeaders().get(header)) {
if (!"Transfer-Encoding".equals(header))
if (!prohibitedHeaders.contains(header))
gaeRequest.addHeader(new HTTPHeader(header, value));
}
}
@ -92,18 +107,20 @@ public class ConvertToGaeRequest implements Function<HttpRequest, HTTPRequest> {
HttpUtils.copy(oldPayload.getContentMetadata(), request.getPayload().getContentMetadata());
}
gaeRequest.setPayload(array);
if (array.length > 0) {
gaeRequest.setHeader(new HTTPHeader("Expect", "100-continue"));
}
} catch (IOException e) {
Throwables.propagate(e);
} finally {
closeQuietly(input);
Closeables.closeQuietly(input);
}
for (Entry<String, String> header : HttpUtils.getContentHeadersFromMetadata(
request.getPayload().getContentMetadata()).entries()) {
if (!prohibitedHeaders.contains(header.getKey()))
gaeRequest.setHeader(new HTTPHeader(header.getKey(), header.getValue()));
}
} else {
gaeRequest.setHeader(new HTTPHeader(HttpHeaders.CONTENT_LENGTH, "0"));
}
return gaeRequest;
}

View File

@ -277,10 +277,8 @@ public class AsyncGaeHttpCommandExecutorServiceIntegrationTest extends BaseHttpC
}
@Override
@Test(enabled = true, invocationCount = 5, timeOut = 3000)
public void testPost() throws MalformedURLException, ExecutionException, InterruptedException, TimeoutException {
setupApiProxy();
super.testPost();
@Test(enabled = false)
public void testPost() {
}
@Override
@ -292,8 +290,7 @@ public class AsyncGaeHttpCommandExecutorServiceIntegrationTest extends BaseHttpC
@Override
@Test(enabled = true, invocationCount = 5, timeOut = 3000)
public void testGetStringViaRequest() throws ExecutionException, InterruptedException,
TimeoutException, IOException {
public void testGetStringViaRequest() throws ExecutionException, InterruptedException, TimeoutException, IOException {
setupApiProxy();
super.testGetStringViaRequest();
}
@ -366,6 +363,7 @@ public class AsyncGaeHttpCommandExecutorServiceIntegrationTest extends BaseHttpC
}
@Override
@Test(enabled = false)
public void testPostContentDisposition() throws ExecutionException, InterruptedException, TimeoutException,
IOException {
setupApiProxy();
@ -373,12 +371,14 @@ public class AsyncGaeHttpCommandExecutorServiceIntegrationTest extends BaseHttpC
}
@Override
@Test(enabled = true, invocationCount = 5, timeOut = 3000)
public void testPostContentEncoding() throws ExecutionException, InterruptedException, TimeoutException, IOException {
setupApiProxy();
super.testPostContentEncoding();
}
@Override
@Test(enabled = true, invocationCount = 5, timeOut = 3000)
public void testPostContentLanguage() throws ExecutionException, InterruptedException, TimeoutException, IOException {
setupApiProxy();
super.testPostContentLanguage();

View File

@ -35,6 +35,7 @@ import javax.ws.rs.core.HttpHeaders;
import org.jclouds.crypto.Crypto;
import org.jclouds.encryption.internal.JCECrypto;
import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpUtils;
import org.jclouds.io.Payloads;
import org.jclouds.util.Strings2;
import org.testng.annotations.BeforeTest;
@ -71,7 +72,7 @@ public class ConvertToGaeRequestTest {
@BeforeTest
void setupClient() throws MalformedURLException {
endPoint = URI.create("http://localhost:80/foo");
req = new ConvertToGaeRequest();
req = new ConvertToGaeRequest(new HttpUtils(0, 0, 0, 0));
}
@Test
@ -101,10 +102,9 @@ public class ConvertToGaeRequestTest {
HttpRequest request = new HttpRequest(HttpMethod.GET, endPoint);
HTTPRequest gaeRequest = req.apply(request);
assert gaeRequest.getPayload() == null;
assertEquals(gaeRequest.getHeaders().size(), 2);// content length, user
// agent
assertEquals(gaeRequest.getHeaders().size(), 1);// user agent
assertEquals(gaeRequest.getHeaders().get(0).getName(), HttpHeaders.USER_AGENT);
assertEquals(gaeRequest.getHeaders().get(0).getValue(), "jclouds/1.0 urlfetch/1.3.5");
assertEquals(gaeRequest.getHeaders().get(0).getValue(), "jclouds/1.0 urlfetch/1.4.3");
}
@Test
@ -157,7 +157,8 @@ public class ConvertToGaeRequestTest {
builder.append(header.getName()).append(": ").append(header.getValue()).append("\n");
}
assertEquals(builder.toString(),
"User-Agent: jclouds/1.0 urlfetch/1.3.5\nContent-Type: text/plain\nContent-Length: 5\nContent-MD5: AQIDBA==\n");
// note content-length is prohibited in gae
"User-Agent: jclouds/1.0 urlfetch/1.4.3\nExpect: 100-continue\nContent-Type: text/plain\nContent-MD5: AQIDBA==\n");
assertEquals(new String(gaeRequest.getPayload()), "hoot!");
}
}

View File

@ -1,206 +0,0 @@
/**
*
* Copyright (C) 2010 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.gae;
import static org.testng.Assert.assertEquals;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Properties;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
import org.jclouds.gae.config.GoogleAppEngineConfigurationModule;
import org.jclouds.http.BaseHttpCommandExecutorServiceIntegrationTest;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.google.appengine.tools.development.testing.LocalServiceTestHelper;
import com.google.appengine.tools.development.testing.LocalURLFetchServiceTestConfig;
import com.google.inject.Module;
/**
*
* Integration test for the URLFetchService
*
* @author Adrian Cole
*/
@Test(threadPoolSize = 10, groups = "integration", sequential = true)
public class GaeHttpCommandExecutorServiceIntegrationTestDisabled extends BaseHttpCommandExecutorServiceIntegrationTest {
@Override
@Test(invocationCount = 50, timeOut = 3000)
public void testKillRobotSlowly() throws MalformedURLException, ExecutionException, InterruptedException,
TimeoutException {
setupApiProxy();
super.testKillRobotSlowly();
}
@Override
@Test(invocationCount = 50, timeOut = 3000)
public void testPostAsInputStream() throws MalformedURLException, ExecutionException, InterruptedException,
TimeoutException {
setupApiProxy();
super.testPostAsInputStream();
}
@Override
@Test(dependsOnMethods = "testPostAsInputStream")
public void testPostResults() {
// GAE converts everything to byte arrays and so failures are not gonna
// happen
assertEquals(postFailures.get(), 0);
}
@Override
@Test(invocationCount = 50, timeOut = 3000)
public void testPostBinder() throws MalformedURLException, ExecutionException, InterruptedException,
TimeoutException {
setupApiProxy();
super.testPostBinder();
}
@BeforeMethod
void setupApiProxy() {
new LocalServiceTestHelper(new LocalURLFetchServiceTestConfig()).setUp();
}
@Override
@Test(invocationCount = 50, timeOut = 3000)
public void testGetAndParseSax() throws MalformedURLException, ExecutionException, InterruptedException,
TimeoutException {
setupApiProxy();
super.testGetAndParseSax();
}
@Override
@Test(invocationCount = 50, timeOut = 3000)
public void testGetString() throws MalformedURLException, ExecutionException, InterruptedException, TimeoutException {
setupApiProxy();
super.testGetString();
}
@Override
@Test(invocationCount = 50, timeOut = 3000, dataProvider = "gets")
public void testGetStringSynch(String path) throws MalformedURLException, ExecutionException, InterruptedException,
TimeoutException {
setupApiProxy();
super.testGetStringSynch(path);
}
@Override
@Test(invocationCount = 50, timeOut = 3000)
public void testGetStringRedirect() throws MalformedURLException, ExecutionException, InterruptedException,
TimeoutException {
setupApiProxy();
super.testGetStringRedirect();
}
@Override
@Test(invocationCount = 50, timeOut = 3000)
public void testGetException() throws MalformedURLException, ExecutionException, InterruptedException,
TimeoutException {
setupApiProxy();
super.testGetException();
}
@Override
@Test(invocationCount = 50, timeOut = 3000)
public void testGetStringPermanentRedirect() throws MalformedURLException, ExecutionException, InterruptedException,
TimeoutException {
setupApiProxy();
super.testGetStringPermanentRedirect();
}
@Override
@Test(invocationCount = 50, timeOut = 3000)
public void testGetSynchException() throws MalformedURLException, ExecutionException, InterruptedException,
TimeoutException {
setupApiProxy();
super.testGetSynchException();
}
@Override
@Test(invocationCount = 50, timeOut = 3000)
public void testPost() throws MalformedURLException, ExecutionException, InterruptedException, TimeoutException {
setupApiProxy();
super.testPost();
}
@Override
@Test(invocationCount = 50, timeOut = 3000)
public void testPut() throws MalformedURLException, ExecutionException, InterruptedException, TimeoutException {
setupApiProxy();
super.testPut();
}
@Override
@Test(invocationCount = 50, timeOut = 3000)
public void testPutRedirect() throws MalformedURLException, ExecutionException, InterruptedException,
TimeoutException {
setupApiProxy();
super.testPutRedirect();
}
@Override
@Test(invocationCount = 50, timeOut = 3000)
public void testGetStringWithHeader() throws MalformedURLException, ExecutionException, InterruptedException,
TimeoutException {
setupApiProxy();
super.testGetStringWithHeader();
}
@Override
@Test(invocationCount = 50, timeOut = 3000)
public void testHead() throws MalformedURLException, ExecutionException, InterruptedException, TimeoutException {
setupApiProxy();
super.testHead();
}
@Override
@Test(invocationCount = 50, timeOut = 3000)
public void testRequestFilter() throws MalformedURLException, ExecutionException, InterruptedException,
TimeoutException {
setupApiProxy();
super.testRequestFilter();
}
protected Module createConnectionModule() {
return new GoogleAppEngineConfigurationModule();
}
@Override
protected void addConnectionProperties(Properties props) {
}
@Override
@Test(enabled = false)
public void testGetBigFile() throws MalformedURLException, ExecutionException, InterruptedException,
TimeoutException {
// disabled since test data is too big
}
@Override
@Test(enabled = false)
public void testUploadBigFile() throws IOException {
// disabled since test data is too big
}
}