/*
* Copyright 2013 Google Inc. All Rights Reserved.
* 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 com.google.appengine.tck.urlfetch;
import java.io.IOException;
import java.net.URL;
import com.google.appengine.api.urlfetch.FetchOptions;
import com.google.appengine.api.urlfetch.HTTPMethod;
import com.google.appengine.api.urlfetch.HTTPRequest;
import com.google.appengine.api.urlfetch.HTTPResponse;
import com.google.appengine.api.urlfetch.URLFetchService;
import com.google.appengine.api.urlfetch.URLFetchServiceFactory;
import com.google.appengine.tck.urlfetch.support.AppUrlBaseFilter;
import org.jboss.arquillian.junit.Arquillian;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
/**
* URLFetchService tests
*/
@RunWith(Arquillian.class)
public class URLFetchServiceTest extends URLFetchTestBase {
public String appUrlBase;
@Test
public void fetchExistingPage() throws Exception {
fetchUrl("http://www.google.org/", 200);
}
@Test
public void fetchNonExistentPage() throws Exception {
fetchUrl("http://www.google.com/404", 404);
}
@Test(expected = IOException.class)
public void fetchNonExistentSite() throws Exception {
fetchUrl("http://i.do.not.exist/", 503);
}
protected String fetchUrl(String url, int expectedResponse) throws IOException {
URLFetchService urlFetchService = URLFetchServiceFactory.getURLFetchService();
HTTPResponse httpResponse = urlFetchService.fetch(new URL(url));
assertEquals(url, expectedResponse, httpResponse.getResponseCode());
return new String(httpResponse.getContent());
}
// N.B. Tests below this point bypass FastNet
@Before
public void setUp() {
appUrlBase = System.getProperty(AppUrlBaseFilter.APP_URL_BASE);
}
// @Test
// public void verifyFetchingFromOurselves() throws Exception {
// URL selfURL = new URL(appUrlBase + "/respond/");
// FetchOptions fetchOptions = FetchOptions.Builder.withDefaults()
// // N.B. Turning off redirects has the (barely documented) side-effect of
// // bypassing FastNet by using http_over_rpc
// .doNotFollowRedirects()
// .setDeadline(10.0);
// HTTPRequest httpRequest = new HTTPRequest(selfURL, HTTPMethod.GET, fetchOptions);
// URLFetchService urlFetchService = URLFetchServiceFactory.getURLFetchService();
// HTTPResponse httpResponse = urlFetchService.fetch(httpRequest);
// assertEquals(200, httpResponse.getResponseCode());
// assertEquals(ResponderServlet.DEFAULT_CONTENT, new String(httpResponse.getContent()));
// }
@Test(expected = IOException.class)
public void fetchNonExistentLocalAppThrowsException() throws Exception {
URL selfURL = new URL("BOGUS-" + appUrlBase + "/");
FetchOptions fetchOptions = FetchOptions.Builder.withDefaults()
.doNotFollowRedirects()
.setDeadline(10.0);
HTTPRequest httpRequest = new HTTPRequest(selfURL, HTTPMethod.GET, fetchOptions);
URLFetchService urlFetchService = URLFetchServiceFactory.getURLFetchService();
HTTPResponse httpResponse = urlFetchService.fetch(httpRequest);
fail("expected exception, got " + httpResponse.getResponseCode());
}
// @Test
// public void timeoutRaiseSocketTimeoutException() throws Exception {
// thrown.expect(SocketTimeoutException.class);
// URL selfURL = new URL(appUrlBase + "/respond/?action=sleep10");
// FetchOptions fetchOptions = FetchOptions.Builder.withDefaults()
// .doNotFollowRedirects()
// .setDeadline(1.0);
// HTTPRequest httpRequest = new HTTPRequest(selfURL, HTTPMethod.GET, fetchOptions);
// URLFetchService urlFetchService = URLFetchServiceFactory.getURLFetchService();
// HTTPResponse httpResponse = urlFetchService.fetch(httpRequest);
// fail("expected a timeout exception, but got " + httpResponse.getResponseCode());
// }
}